Android & Javascript - 从两个函数到一个函数

Android & Javascript - From two functions to one

本文关键字:函数 两个 一个 amp Android Javascript      更新时间:2023-09-26

MainActivity.java

public String URI = null;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 0 && resultCode == RESULT_OK)
    {
        Uri pickedImage = data.getData();
        URI = pickedImage.toString();
    }
}
public String GetURI()
{
   return URI;
}



网络应用界面.java

@JavascriptInterface
public void GetPicture()
{
    Intent galleryIntent = new Intent(Intent.ACTION_PICK);
    galleryIntent.setType("image/*");
    ((MainActivity) mContext).startActivityForResult(galleryIntent, 0);
}
@JavascriptInterface
public String GetURI()
{
    return getRealPathFromURI(mContext, Uri.parse(((MainActivity) mContext).GetURI()));
}


我正在使用以下Javascript函数

function GetPicture()
{
    Android.GetPicture();
}
function loadImage()
{
    document.getElementById("img").src = Android.GetURI();
}

第一个用于获取图片并将完整路径存储在字符串中。第二个函数用于从字符串中获取完整路径。

目前这是有效的,因为我首先调用GetPicture,然后加载图像。但我想"合并"这些功能。所以Javascript将是:

function loadImage()
{
    document.getElementById("img").src = Android.GetPicture();
}

所以我将代码从WebAppInterface.java更改为:

@JavascriptInterface
public String GetPicture()
{
    Intent galleryIntent = new Intent(Intent.ACTION_PICK);
    galleryIntent.setType("image/*");
    ((MainActivity) mContext).startActivityForResult(galleryIntent, 0);
    return ((MainActivity) mContext).GetURI();
}

但它不起作用。我想我知道为什么,因为在设置字符串 URI 之前调用 GetURI。

那么我该如何解决这个问题呢?


如果有人知道更好的标题,请告诉我。

好的,我想我找到了解决方案,但我不知道这是否是最好的方法。所以对于那些想知道我是如何修复它的人:

我更改了 GetPicture 方法

@JavascriptInterface
public String GetPicture()
{
    Intent galleryIntent = new Intent(Intent.ACTION_PICK);
    galleryIntent.setType("image/*");
    ((MainActivity) mContext).startActivityForResult(galleryIntent, 0);
    while(((MainActivity) mContext).IsFinished == false){}
    return ((MainActivity) mContext).GetURI();
}

在 MainActivity 中.java我添加了一个名为 IsFinished 的公共布尔值(设置为 false),当用户选择图像 (onActivityResult) 时,它将是真的。

所以代码将是:

public String URI = null;
public boolean IsFinished = false;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 0 && resultCode == RESULT_OK)
    {
        Uri pickedImage = data.getData();
        URI = pickedImage.toString();
        IsFinished = true;
    }
}
public String GetURI()
{
   return URI;
}