我在我的Android应用程序中使用addJavascriptInterface来允许JavaScript调用我在本地Java应用程序中创建的函数。
这在Android 2.1中运行良好,但在Android 2.2中,我收到错误消息“在NPObject上调用方法时出错!”
当我检测方法调用时,会调用本机方法的内部操作,但异常却在JavaScript中被抛出。
我在我的Android应用程序中使用addJavascriptInterface来允许JavaScript调用我在本地Java应用程序中创建的函数。
这在Android 2.1中运行良好,但在Android 2.2中,我收到错误消息“在NPObject上调用方法时出错!”
当我检测方法调用时,会调用本机方法的内部操作,但异常却在JavaScript中被抛出。
我遇到了与此完全相同的错误:
未捕获的错误:在 NPObject 上调用方法时出错!
结果发现我正在尝试从 WebView 调用一个 JavascriptInterface 函数,代码如下:
AndroidJS.populateField(field);
而在 Java 侧,该函数不接受参数:
public void populateField() {}
简单地让 Java 函数接受一个参数即可解决此错误。
例如:
public void populateField(String field) {}
这可能不是唯一导致此错误的原因,也很可能不是。但这是我解决特定情况的方式。希望这可以帮助你! :)
好的,我也遇到了同样的问题,就是在今天。
我所做的是将代码放在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;
}
//This will fail
public Long getmyLongVal() {
return 123456789;
}
//This will work
public long getMyNativeLongVal() {
return 123456789;
}
如果你想避免NPObject错误,那么请将任何被JavaScript使用的方法中的包装类删除。
我在使用Javascript-to-Java接口(WebView.addJavascriptInterface
)时遇到了同样的问题。
在Android 2.1中一切正常,但在Android 2.2中,Javascript无法调用此接口中的方法。它返回一个错误:Uncaught Error: Error calling method on NPObject!
似乎在Android 2.2上,WebView在处理从接口函数返回的布尔数据类型时存在问题。
更改为:
public Boolean test_func() { return true; }
...转换为:
public int test_func() { return 1; }
...问题已解决。