将一个数组从安卓传递到JavaScript

3
我已经阅读了这里分享的所有帖子,仍然找不到运行我的代码并使我的应用程序正常工作的正确答案。如果你们中的任何人可以帮助我解决这个问题,我将不胜感激。
我正在调用绑定函数getLocation(),如下所述:在标签中。getLocation函数已绑定到Android中的MyHandler,如下所述:
public class MainActivity extends Activity {

    WebView webView;
    private Handler mHandler = new Handler ();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        webView = (WebView) findViewById(R.id.webView);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.addJavascriptInterface (new Object(){
                       public void getLocation(){
                          mHandler.post (new Runnable(){
                            public void run(){
                               String[] values = {"3.16802","101.71309"};
                               webView.loadUrl("javascript:setLocation("+values+")");
                            }
                          });
                       }
                }, "MyHandler");
    webView.loadUrl("file:///android_asset/example/quick-start-example.html");

    }
}

Android中的setLocation函数调用以下JavaScript方法,此处我们将数组传递到JS函数中:

function setLocation(val){
    var lat = val[0];
    var lng = val[1];
}

请就此提供建议。谢谢。
5个回答

1

请指导我如何在 Android 应用程序加载页面时调用 JavaScript 函数,这意味着应用程序中没有按钮或链接点击。我希望在 Android 上每次应用程序加载时调用 JavaScript 函数,请给我建议。 - Amin Aminian
更正:如何在 WebView 加载时调用 JavaScript 函数。 - Amin Aminian

1
无论何时您在JavaScript函数中传递像数组或列表这样的对象,首先需要将该对象转换为JSON格式,如下所示:
 String[] values = {"3.16802","101.71309"};
 webView.loadUrl("javascript:setLocation('"+new JSONArray(values)+"')");

在 JavaScript 函数中,您需要再次解析 JSON 格式的输入,如下所示:
function setLocation(input){
var value=JSON.parse(input);
var lat = value[0];
var lng = value[1];
}

0

针对上面的评论,您可以使用onPageFinished来执行loadurl部分,一旦您的页面加载完成,就像这样:

myWebView.setWebViewClient(new WebViewClient(){
    public void onPageFinished(WebView view, String url){
        myWebView.loadUrl("javascript:setLocation("+values+")");
    }
});

0
 @JavascriptInterface
    public String[] displayName() {
        String ar[] = new String[2];
        ar[0]= "name1";
        ar[1] =  "name2";
        return ar;
    }

或者在 JavaScript 函数中获取数据

   var t1 = Android.displayName();

0

你应该尝试这个:

Gson gson = new Gson();
String data = gson.toJson(someArray);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接