将数组从android传递给JavaScript

时间:2013-07-29 17:58:33

标签: javascript android

我浏览了这里分享的所有帖子,我仍然找不到正确的答案来运行我的代码并使我的应用程序正常运行。如果你们中的任何一位能帮我解决这个问题,我将不胜感激。

如上所述,我在tages中调用有界函数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调用JavaScrip中的方法,如下所示,这里我们将数组传递给JS函数:

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

请就此提出建议。谢谢。

5 个答案:

答案 0 :(得分:1)

我不认为你可以很容易地做一个像Array这样的复杂对象。你开始进入JSON领域了。

事实上,我发现了一些使用JSON来实现此目的的示例代码。

问题:您希望将数组数据从Java推送到JavaScript和/或从JavaScript推送到Java http://androidcookbook.com/Recipe.seam?recipeId=4426&title=Exchanging%20Array%20Data%20between%20Java%20and%20JavaScript

答案 1 :(得分:0)

^以上评论,你可以使用onPageFinished来执行loadurl部分一旦你的页面完成加载,如下所示:

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

答案 2 :(得分:0)

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

或在js函数中获取数据

   var t1 = Android.displayName();

答案 3 :(得分:0)

您可能应该尝试以下方法:

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

答案 4 :(得分:0)

每当在Javascript函数中传递诸如Array或List之类的对象时,首先,您需要将该对象转换为JSON格式,如下所示:

 String[] values = {"3.16802","101.71309"};
 webView.loadUrl("javascript:setLocation('"+new JSONArray(values)+"')");

再次使用Java脚本功能,您必须解析JSON格式的输入,如下所示:

function setLocation(input){
var value=JSON.parse(input);
var lat = value[0];
var lng = value[1];
}