Rhinoを使用してJSコードをJava(アンドロイド)アプリに埋め込みました。 Javascriptで後で呼ばれるJava関数を返すには、Javaで書かれた特定の関数が必要です。 iOS実装との互換性を維持するためには、これをJS関数変数に格納して保存する必要があります。私はJavascriptからJS関数として扱われるJavaオブジェクトを返す方法を理解できません。私はこれに対する答えはNativeJavaMethodを作ることだと思ったが、私はJavascriptで呼び出すときに "this"ポインタが間違っていると常に言います。私が使用したコードは次のとおりです。Javaインスタンス変数からJavascript関数を保存する
NativeJavaMethod("", runnable.getClass().getMethod("run"), scope);
ここで、実行可能ファイルはRunnableでスコープはトップレベルのスコープです。これを行う方法がある必要があります、私は間違って何をしていますか?私はその範囲を推測していますが、私はそれが何を望んでいるのか分かりません。
正確なメッセージ:org.mozilla.javascript.EvaluatorException: Java method "run" was invoked with [object Object] as "this" value that can not be converted to Java type java.lang.Runnable. (#1)
(。。私もその後も変数にrunnable.runを格納し、Javaから復帰することをつかんJS変数に実行可能を書いて、同じ問題を試してみました)
編集:
NativeJavaMethodはJava関数から呼び出し元(JavaScriptで書かれています)に返され、変数に格納され、後で実行されます。だから、JS
var x=myobject.makeFunction(); //makeFunction is in Java, is properly called and returns the NativeJavaMethod
x(); //This throws the above exception
私はその変数を呼び出し、その後、JS変数に格納する(この機能自体は、JavaScriptから呼ばれた)、それを返しています。ので、var x = SomeJavaMethodThatReturnsNativeObject();バツ(); JSで –