这是我用过的整个Java代码。我将在下面更详细地解释...

public class Test7 extends Activity {

//debug

private final static String TAG = "JSInterface";

private WebView wv;

private class JSInterface {

private WebView wv;

// Variables to manage interfacing with JS

private String returnValue;

private boolean canReadReturnValue;

private Lock lockOnJS;

private Condition condVarOnJS;

public JSInterface (WebView wv) {

this.wv = wv;

this.canReadReturnValue = false;

this.lockOnJS = new ReentrantLock();

this.condVarOnJS = lockOnJS.newCondition();

}

public void setReturnValue(String ret) {

lockOnJS.lock();

returnValue = ret;

canReadReturnValue = true;

condVarOnJS.signal();

lockOnJS.unlock();

Log.d(TAG, "returnValue = " + returnValue);

}

public String getReturnValue() {

Log.d(TAG, "enter in getReturnValue");

lockOnJS.lock();

while (!canReadReturnValue) {

try {

Log.d(TAG, "get wait...");

condVarOnJS.await();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

lockOnJS.unlock();

Log.d(TAG, "returnValue: " + returnValue);

return returnValue;

}

public String getNewString() {

wv.loadUrl("javascript:JSInterface.setReturnValue(createNewString())");

return getReturnValue();

}

}

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

wv = (WebView) findViewById(R.id.webView1);

wv.getSettings().setJavaScriptEnabled(true);

wv.addJavascriptInterface(new JSInterface(wv), "JSInterface");

wv.loadUrl("file:///android_asset/prova7.html");

}

public void button1(View v) {

wv.loadUrl("javascript:func('1')");

}

}它似乎工作正常。

你可以看到我有一个按钮(我们可以调用button1),然后单击它,它会尝试执行一个名为func()的JS方法。

public void button1(View v) {

wv.loadUrl("javascript:func('1')");

}在这个JS方法中,我必须调用另一个Java方法。这是代码:

function func(id) {

document.getElementById(id).innerHTML = JSInterface.getNewString();

}我需要将JSInterface.getNewString()的结果返回给innerHTML变量。

JSInterface.getNewString()的代码是这样的:

public String getNewString() {

wv.loadUrl("javascript:JSInterface.setReturnValue(createNewString())");

return getReturnValue();

}你可以看到我使用方法setReturnValue和getReturnValue来返回另一个JS方法返回的值。这是代码:

function createNewString() {

return "my New String";

}问题是,当我尝试设置returnValue时,函数createNewString永远不会执行!如果我添加一个console.log()行,我的logCat不显示任何内容!

我不明白为什么会发生这种情况。请帮我解决这个大问题!

每一个帮助将不胜感激

android 连续调用js方法,Android的WebView中的JavascriptInterface:对JS的多次调用会导致死锁...相关推荐

  1. Android Studio开发安卓app 安卓与webview中的js交互

    Android Studio开发安卓app 安卓与webview中的js交互 1.webview中的页面调用android中的方法 在Android Studio开发安卓app 封装WEB(H5,UR ...

  2. import android.view.window;,尝试在空对象引用上调用虚拟方法‘android.view.Window$回调...

    尝试在空对象引用上调用虚拟方法'android.view.Window$回调-android.view.Window.getCallback()' 当我SplashActivity打开LoginAct ...

  3. android颜色值的表示方法android:background=#FFFFFFFF的意思

    android颜色值的表示方法 android:background="#FFFFFFFF"的意思 Android中的颜色值是通过红(Red).绿(Green).蓝(Blue)三原 ...

  4. html中如何引入vue,vue.js怎样引入到HTML中,vue引入第三方js库

    vue.js怎样引入到HTML中如何将vue.js引入HTML,把vue.js引入HTML的方法:一.下载vue . js:然后在HTML中添加vue.js包,其语法为"script src ...

  5. android webview调js方法,Android中WebView与H5的交互,Native与JS方法互调

    项目中经常用到WebView与H5的交互,一个是H5调本地方法,一个是本地调H5方法,在此记录一下. 首先,启用JS支持 //启用js支持 webSettings.setJavaScriptEnabl ...

  6. uniapp调用手机摄像头_uniapp原生插件开发之调用原生方法(android)

    需要实现的功能: 点击uniapp页面view,传递参数,调用android原生代码,然后原生代码处理数据,返回到uniapp页面 步骤 1.编写uniapp的视图页面 {{title}} 点击调用a ...

  7. android 虚方法,尝试在空对象引用上调用虚方法’android.view.View android.view.View.getRootView()’...

    我收到这个错误, "Attempt to invoke virtual method 'android.view.View android.view.View.getRootView()' ...

  8. java 防止js注入_在WebView中如何让JS与Java安全地互相调用

    在现在安卓应用原生开发中,为了追求开发的效率以及移植的便利性,使用WebView作为业务内容展示与交互的主要载体是个不错的折中方案.那么在 这种Hybrid(混合式) App中,难免就会遇到页面JS需 ...

  9. android源码使用方法,android源码中使用到的设计模式(创建型)

    1.单例模式 1.1定义 确保某个类只有一个实例,而且自行实例化并向整个系统提供者个实例. 1.2单例的形式 饿汉模式:第一次就加载,用空间换时间. public class SingleTon { ...

最新文章

  1. 计算概论c和文科计算机,计算概论与计算机程序设计基础/C语言【理工学社】
  2. form表单刷新_《大胖 ? 小课》- 不用 js 实现文件无刷新上传
  3. linux 网卡配置不一致,linux环境下,双网卡配置不同网段后,路由问题
  4. Spring5-IOC底层原理
  5. JeecgBoot 移动OA 新版本出炉,速度体验!!!
  6. 2018年90后薪资报告出炉:你在哪个级别???
  7. Android基于Socket无线遥控 - 模拟触摸按键篇framework jar
  8. OpenCV图像处理(2)——形态学操作
  9. 这顶海贼王的帽子,我Python给你带上了 | 【人脸识别应用】
  10. unixbench分析_unixbench测试CPU性能工具
  11. 2017CS231n李飞飞深度视觉识别笔记(八)——深度学习 软件
  12. win7查看计算机设置密码,如何查看win7电脑开机密码_win7专业版电脑开机密码怎么查看...
  13. 泰勒公式的展开细节解析
  14. 计算机三维课设的目的和意义,三维动漫设计开题报告
  15. [转]孙悟空无姓无名的时候,阎王生死簿是怎么写的呢?
  16. opencv阈值图像Threshold方法
  17. 共模扼流圈的工作原理与作用以及特点和应用详解
  18. 群辉videostation支持DST、EAC3
  19. java jdk 7_jdk1.7 64位-jdk7 64位下载7u80 官方正式版(Java SE Development Kit 7)-西西软件下载...
  20. Hilberling电源维修罗芬Rofin激光电源控制器维修HG-101A

热门文章

  1. Scrapy爬虫框架命令行操作
  2. 在2003 server上部署DNS服务器
  3. jQuery的延迟对象
  4. easyUI的中文乱码问题
  5. matlab等距线扫描多边形程序实现_常用的3D扫描仪都有哪些类型?
  6. 中心线超出轮廓线多少_激光切割的这些基础知识,你知道多少?
  7. Spark:获取dataframe某列最大值
  8. 一个基于 Spring Boot 的项目骨架,拿走即用
  9. 2021-10-20 哈希表 恋上数据结构笔记
  10. hibernate继承关系映射关系方法(二)--每个子类一张表