在NPObject上调用方法时出错!在Android 2.2中

Kev*_*vin 11 android android-webview

我在我的Android应用程序中使用addJavascriptInterface来允许JavaScript调用我在本机Java应用程序中创建的函数.

这在Android 2.1中运行良好,但是在Android 2.2中我收到错误消息"错误调用NPObject上的方法!"

当我调用方法调用时,调用本机方法的内部,但异常是在JavaScript中抛出.

muf*_*ffs 11

我收到了这个确切的错误:

Uncaught Error: Error calling method on NPObject!

结果我试图从webview调用JavascriptInterface函数,如下所示:

AndroidJS.populateField(field);

而在Java方面,该函数不接受参数:

public void populateField() {}

简单地允许Java函数接受参数为我解决了这个错误.

例如, public void populateField(String field) {}

这可能不是,也可能不是,这个错误可能抛出的唯一原因.这就是我如何解决我的具体情况.希望这可以帮助!:)


Nik*_*rts 5

根据我的经验,这个问题是由Javascript接口带回Javascript不能自动识别的对象引起的.

在Android中,这是由布尔等包装器引起的,与它们的本机版本booleanlong相比.

//This will fail
public Long getmyLongVal() {
    return 123456789;
}

//This will work
public long getMyNativeLongVal() {
    return 123456789;
}
Run Code Online (Sandbox Code Playgroud)

因此,如果要避免NPObject错误,请将您的包装类移除到Javascript使用的任何方法.


RRT*_*RTW 5

好的,我也有同样的问题,就在今天.

我所做的是将代码放在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;
}
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题,并希望它可以帮助一些身体...... :-)


grz*_*aks 1

我在 Javascript-to-Java 接口 ( ) 中遇到了同样的问题WebView.addJavascriptInterface

在 Android 2.1 中,一切工作正常,但在 Android 2.2 中,Javascript 无法从此接口调用方法。它返回了一个错误:Uncaught Error: Error calling method on NPObject!

在 Android 2.2 上,WebView 似乎对从接口函数返回的 Boolean 数据类型存在问题。

改变:

public Boolean test_func() { return true; }
Run Code Online (Sandbox Code Playgroud)

... 到:

public int test_func() { return 1; }
Run Code Online (Sandbox Code Playgroud)

...解决了问题。