【发布时间】:2013-11-06 17:24:45
【问题描述】:
我有一个带有 javascript 方法
的 webview
调用android Javascript 接口(JAVA) 方法,然后
JavaScript 接口(JAVA) 调用context(Reader) 活动的方法 来打开一个UI 屏幕。
当我直接从 ReaderActivity 运行 openDiscussionsUI() 时,它会很好地打开 UI,但从 Javascript 接口运行时却不能,它似乎没有完全通过 openDiscussionsUI() 方法运行,就好像它被中断了? 希望有人可以帮助我。提前致谢。
javascript方法
marginIconClick: function (itemId) {
activity.startDiscussionsActivity();
}
(JAVA) JavaScript 接口方法
public void startDiscussionsActivity() {
readerActivity.openDiscussionsUI();
Log.e("startDiscussionsActivity","startDiscussionsActivity");
}
ReaderActivity 方法
public void openDiscussionsUI() {
Log.e("openDiscussionsUI 1","openDiscussionsUI 1");
discussionBox.startAnimation(slidenotesup);
Log.e("openDiscussionsUI 2","openDiscussionsUI 2");
discussionBox.setVisibility(View.VISIBLE);
Log.e("openDiscussionsUI 3","openDiscussionsUI 3");
discussionDescription.requestFocus();
Log.e("openDiscussionsUI 4","openDiscussionsUI 4");
}
这是我的日志
点击图标编号#1
11-06 17:21:39.190 12951-12980/com.double_eye.monamiq E/openDiscussionsUI 1﹕ openDiscussionsUI 1
11-06 17:21:39.190 12951-12980/com.double_eye.monamiq E/openDiscussionsUI 2﹕ openDiscussionsUI 2
点击图标编号#2
11-06 17:22:32.154 12951-12980/com.double_eye.monamiq E/openDiscussionsUI 1﹕ openDiscussionsUI 1
11-06 17:22:32.154 12951-12980/com.double_eye.monamiq E/openDiscussionsUI 2﹕ openDiscussionsUI 2
11-06 17:22:32.154 12951-12980/com.double_eye.monamiq E/openDiscussionsUI 3﹕ openDiscussionsUI 3
11-06 17:22:32.170 12951-12951/com.double_eye.monamiq I/WEBVIEW﹕ Message - 266:Uncaught Error: Error calling method on NPObject.
点击图标编号#3
11-06 17:22:52.818 12951-12980/com.double_eye.monamiq E/openDiscussionsUI 1﹕ openDiscussionsUI 1
11-06 17:22:52.818 12951-12980/com.double_eye.monamiq E/openDiscussionsUI 2﹕ openDiscussionsUI 2
11-06 17:22:52.818 12951-12980/com.double_eye.monamiq E/openDiscussionsUI 3﹕ openDiscussionsUI 3
11-06 17:22:52.818 12951-12980/com.double_eye.monamiq E/openDiscussionsUI 4﹕ openDiscussionsUI 4
11-06 17:22:52.818 12951-12980/com.double_eye.monamiq E/startDiscussionsActivity﹕ startDiscussionsActivity
点击图标编号#4
11-06 17:23:37.850 12951-12980/com.double_eye.monamiq E/openDiscussionsUI 1﹕ openDiscussionsUI 1
11-06 17:23:37.850 12951-12980/com.double_eye.monamiq E/openDiscussionsUI 2﹕ openDiscussionsUI 2
11-06 17:23:37.850 12951-12980/com.double_eye.monamiq E/openDiscussionsUI 3﹕ openDiscussionsUI 3
11-06 17:23:37.850 12951-12980/com.double_eye.monamiq E/openDiscussionsUI 4﹕ openDiscussionsUI 4
11-06 17:23:37.850 12951-12980/com.double_eye.monamiq E/startDiscussionsActivity﹕ startDiscussionsActivity
第3次和第4次跑过去了还是不显示ui,很奇怪。
更新:
来自 Javascriptinterface 的回调未在 UI 线程上运行
公共无效测试(){ // 调用 AndroidInterface.test() 后 1ms 到达这里。到达网络线程。
public void startDiscussionsActivity() {
runOnUiThread(new Runnable() {
@Override
public void run() {
readerActivity.openDiscussionsUI();
Log.e("startDiscussionsActivity","startDiscussionsActivity");
}
});
}
【问题讨论】:
-
确保您在主线程上运行 openDiscussionsUI()。我似乎记得 JavaScript 接口回调是在一个单独的线程上产生的,但是我现在无法验证它。
-
非常感谢您的提醒,我会调查一下。
-
看起来这是回调没有在ui线程上运行的问题,已经为awnser添加了修复,感谢帮助:D
-
欢迎您。我已经发布了答案,如果您选择它,我将不胜感激。
标签: java javascript android