11

Android アプリケーション内で addJavascriptInterface を使用して、JavaScript がネイティブ Java アプリケーションで作成した関数を呼び出せるようにしています。

これは Android 2.1 ではうまく機能しましたが、Android 2.2 では「NPObject のメソッドの呼び出し中にエラーが発生しました!」というエラー メッセージが表示されます。

メソッド呼び出しを計測すると、ネイティブ メソッドの内部が呼び出されますが、JavaScript で例外がスローされます。

4

6 に答える 6

11

私はこの正確なエラーを受け取っていました:

Uncaught Error: Error calling method on NPObject!

次のように、webview から JavascriptInterface 関数を呼び出そうとしていました。

AndroidJS.populateField(field);

Java 側では、関数はパラメーターを受け入れませんでした。

public void populateField() {}

Java関数がパラメーターを受け入れるようにするだけで、このエラーは解決しました。

例えば、 public void populateField(String field) {}

これが、このエラーがスローされる唯一の理由ではない可能性があります。これは、特定のシナリオを解決した方法です。お役に立てれば!:)

于 2012-05-18T16:30:08.813 に答える
6

OK、今日も同じ問題があります。

私がしたことは、以下のコードのように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;
}

これで私の問題は解決しました。誰かの体に役立つことを願っています... :-)

于 2013-05-23T07:22:00.900 に答える
5

私の経験では、この問題は、Javascript が自動的に識別しないオブジェクトを返す Javascript インターフェースによって引き起こされます。

Android では、ネイティブ バージョンのbooleanlongと比較して、BooleanLongなどのラッパーが原因で発生します。

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

//This will work
public long getMyNativeLongVal() {
    return 123456789;
}

したがって、NPObject エラーを回避したい場合は、Javascript で使用されているすべてのメソッドのラッパー クラスを削除してください。

于 2012-01-03T20:33:03.973 に答える
2

これは、この問題に遭遇した一部の人々にとって役立つ可能性がある、この問題で見つけたひねりです (そして、説明を無視しているように見える断続的な障害を説明している可能性があります)...

javascript インターフェイス コールバックがクリーンに戻ることを許可する前に、リターン ハンドラ コードで例外がスローされた (キャッチされなかった) 場合、それは失敗した呼び出しとして伝播し、このエラーも発生します。関数またはパラメータがありません。

このケースを見つける最も簡単な方法 (最終的な実装でこれを使用するかどうかに関係なく) は、ハンドラー コードを UI スレッドにプッシュすることです (コールバックは UI スレッドにはありません)。クリーンを返すと、発生した後続の例外は、それらをキャッチするか、アプリがクラッシュするまで適切に伝播されます。いずれにせよ、実際に何が起こっているかを正確に見ることができます。そうしないと、キャッチされなかった例外が javascript に返され、そこで処理も報告もされません (実行中の JS にエラー トラップ コードを具体的に作成しない限り)。

グッドラックオール。

bh

于 2013-05-30T14:35:42.053 に答える
1

JavascriptからJavaへのインターフェースでも同じ問題が発生しました(WebView.addJavascriptInterface)。

Android 2.1ではすべてが正常に機能しましたが、Android2.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; }

... 問題を解決しました。

于 2011-07-25T09:52:38.843 に答える
0

これはもうサポートされていないと思います (Always game NPObject error)。このスレッドの回答を参照してくださいCordovaPlugin からのアクティビティを開くにアクセスしてください

于 2013-05-08T21:30:16.393 に答える