我在我的Android应用程序中使用addJavascriptInterface来允许JavaScript调用我在本机Java应用程序中创建的函数.
这在Android 2.1中运行良好,但是在Android 2.2中我收到错误消息"错误调用NPObject上的方法!"
当我调用方法调用时,调用本机方法的内部,但异常是在JavaScript中抛出.
我收到了这个确切的错误:
Uncaught Error: Error calling method on NPObject!
结果我试图从webview调用JavascriptInterface函数,如下所示:
AndroidJS.populateField(field);
而在Java方面,该函数不接受参数:
public void populateField() {}
简单地允许Java函数接受参数为我解决了这个错误.
例如,
public void populateField(String field) {}
这可能不是,也可能不是,这个错误可能抛出的唯一原因.这就是我如何解决我的具体情况.希望这可以帮助!:)
根据我的经验,这个问题是由Javascript接口带回Javascript不能自动识别的对象引起的.
在Android中,这是由布尔或龙等包装器引起的,与它们的本机版本boolean和long相比.
//This will fail public Long getmyLongVal() { return 123456789; } //This will work public long getMyNativeLongVal() { return 123456789; }
因此,如果要避免NPObject错误,请将您的包装类移除到Javascript使用的任何方法.
好的,我也有同样的问题,就在今天.
我所做的是将代码放在UI线程中,如下面的代码:
/** * ???Javascript???method * Method for Javascript in HTML * @param java.lang.String - Playlist ID */ public int callListByPID(final String pId) { Log.i(Constants.TAG, "PAD Playlist ID from HTML: "+pId); runOnUiThread(new Runnable() { public void run() { // Put your code here... } }); return 1; }
这解决了我的问题,并希望它可以帮助一些身体...... :-)