最近弄android与JS交互遇到一个奇怪的问题。首先了解一下具体的场景。

一个Activity中有一个WebView,然后有一个Android原生Button,默认Button是不可用状态,WebView要展示的东西是可以上下滑动的,当WebView中内容滑动到底部JS会回调Android的一个方法。我在这个方法中将Button设为可用状态。

@JavascriptInterfacepublic void readed() {   button.setEnabled(true);}

实际情况是JS已经调用了readed方法,但是Button的状态却未体现出来,并且只有点击Button一下,Button才会显示为可用状态。百思不得其解啊。很久之后注意到日志中有这么一个异常信息:

Uncaught Error: Error calling method on NPObject.

最后查找了一些资料,没有太好的解释,但是使用下面的方式进行处理可以达到想要的效果,这里给出代码,稍后有时间探索一下具体的原理:

Handler mHandler = new Handler();@JavascriptInterfacepublic void readed() {    mHandler.post(new Runnale(){        public void run(){            button.setEnabled(true);        }    });}

使用上面的代码就可以解决类似的问题了。

大概的原因可能是JS调用的readed方法不是主线程,所以更新UI会出现此类异常情况。

这里只是猜测,如果哪位童鞋知道具体原因欢迎留言指导。

更多相关文章

  1. Handle详解和使用方法
  2. Android下引用系统库的方法及问题
  3. 关于Zipalign的介绍和使用方法
  4. Android测试方法总结
  5. Android下生成core dump的方法
  6. Android 应用程序窗体显示状态操作(requestWindowFeature()的应用
  7. Android中控件的显示和隐藏以及EditText的可编辑和不可编辑状态
  8. ubuntu下eclipse Android ADT中SDK Manager中安装SDK失败的方法

随机推荐

  1. Android之Spinner用法
  2. 理解Android(安卓)UI线程
  3. android 动画2
  4. Android(安卓)P新特性:强制执行 FLAG_ACT
  5. Android登录界面开发及响应;页面跳转;传参
  6. android proguard
  7. android density
  8. Android(安卓)学习记录-调试输出
  9. Android(安卓)Service实现闹钟
  10. android使用HTTP协议读取数据