JS调用Android时遇到的一个问题

最近在开发的一个项目中,要涉及到JS调用Java代码的相关知识,其实用起来非常简单,上一段基本的代码:

WebSettings settings = webview.getSettings();
//调用到JS相关的方法必须设置的一个属性
settings.setJavaScriptEnabled(true);
//设置可弹窗
settings.setJavaScriptCanOpenWindowsAutomatically(true);
//加载网页
webview.loadUrl("http://wechat.poso2o.com/editor/?v=2.0");
//设置JS调用Android代码的对象,第一个参数为要调用的类,第二个参数为该类的引用名称
webview.addJavascriptInterface(Activity.this, "android");

上面这段代码是关于webview的几个基本属性的设置,注释都有说明,下面是Java为JS提供的方法:

@JavascriptInterface
public void callDelClick(){
id = "";
name = "";
ad_name.setText("请选择");}

上面这段代码运行起来是没有什么问题的,效果如期;但是,在setText代码后面,我添加了一个刷新列表的需求:

adapter.notifyDataSetChanged(data,id);

问题出现了:后面添加的刷新代码始终没有起作用,根本没有走这个方法;

刚开始,我的脑海里闪过一个想法,会不会是线程的问题:因为涉及到控件的处理都必须在主线程嘛,但是后面一想,上面的setText也起作用了,说明当前是主线程,应该不是这个问题,就这样,我错过了正确的问题解决方法,我还在尝试其他的方法;

经历了N多次尝试未果之后,我的脑海里终于有了要验证一下之前的设想的想法:验证一下是不是线程的问题。

@JavascriptInterface
public void callDelClick(){
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            id = "";
            name = "";
            ad_name.setText("请选择");
            adapter.notifyDataSetChanged(data,id);
        }
    });
}

很简单,让代码运行在主线程,果真是这回事 emm。。。

无奈了一会之后,问题又来了,为什么没改之前setText可以运行而且没有报错?

原因我就不再多述,连接在此,有兴趣的朋友可以打开看一下,我觉得作者说的非常深入,非常清楚了

https://blog.csdn.net/snail_mac/article/details/73772156

猜你喜欢

转载自blog.csdn.net/dennyzhang2/article/details/79716082
今日推荐