java - Android Javascript 接口(interface)

标签 java javascript android

我有一个带有javascript方法
的 WebView 调用 android Javascript Interface(JAVA) 方法,然后
Javscript Interface(JAVA) 调用 context(Reader) Activity 的方法来打开 UI 屏幕。

当我直接从 ReaderActivity 运行 openDiscussionsUI() 时,它可以正常打开 UI,但从 Javascript 界面运行它时则不然,它似乎没有完全运行 openDiscussionsUI() 方法,就好像它被中断了一样? strong> 希望有人能帮助我解决这个问题。提前致谢。



JavaScript 方法

marginIconClick: function (itemId) {
    activity.startDiscussionsActivity();
}



(JAVA)JavaScript接口(interface)方法

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



到了第三次、第四次的时候都跑完了,但是还是不显示ui,很奇怪。

更新:

来自 Javascript 接口(interface)的回调未在 UI 线程上运行

公共(public)无效测试(){ //调用 AndroidInterface.test() 后 1 毫秒到达此处。到达网络线程。

public void startDiscussionsActivity() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                readerActivity.openDiscussionsUI();
                Log.e("startDiscussionsActivity","startDiscussionsActivity");
            }
        });
    }

最佳答案

确保所有 ui 工作都在主 (UI) 线程上执行。 JavaScript 接口(interface)回调到一个单独的线程,这意味着您需要调用 myActivity.runOnUiThread() 或类似的函数。

关于java - Android Javascript 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19818649/

相关文章:

javascript - 如何直接选择id元素后的元素

java - 使用不同的值调用递归函数

java - 为什么我的 jar 文件不能在双击时启动?

javascript - 在整个表上一一运行 Ajax 请求

java - Android Freebase 查询 IOException

android - 如何将始终从特定线程调用其回调的监听器包装到符合 subscribeOn 定义的 Scheduler 的 Observable 中?

android - 从android应用程序上传视频到http服务器

java - 使用 Graphics 绘制的 BufferedImage 中的数据

java - 如何在马尔可夫链中编写带有运行时错误的递归调用

javascript - 后续变量声明必须具有相同的类型