2016-04-07 6 views
0

Rhinoライブラリを使用してAndroid関数でJavaScript関数を実行しています。私のようなJavaScript関数を持って、Rhinoを使用してjavascript関数のJava HashMapから値を取得する方法

var exucuteJS = function(controlValues) { 
var valueSelected = controlValues['country']; 
valueSelected = valueSelected.toUpperCase(); 
switch (valueSelected) { 
    case "INDIA": 
     return "IND_HOME"; 
    case "NEPAL": 
     return "NEP_HOME"; 
    default: 
     return "DEF_HOME" 
} 
} 

私は、パラメータとしてのJavaのHashMapオブジェクトを渡しています、関数executeJSにcontrolValuesを言います。問題は、キーから値を取得するために、Rhino can not javascript codeです。

var valueSelected = controlValues['country']; 

戻り値は未定義です。

それは

var valueSelected = controlValues.get('country'); 

が、その有効でないjavascriptのコードは、この行で正常に動作します。

アンドロイドとiOSの両方で同じjavascriptが実行されます。上記の行はiOSではサポートされません。提案してください。私はRhinoの最新バージョンを使用しています。

+0

で発見

new JsonParser(context, scope).parseValue("{\"this is\":\"JSON\"}"); 

です。要件は人によって異なります。同じことを理解していないまま下に投票することは、とてもうっ血です – AndEngine

答えて

1

最後に、自分自身が答えを見つけました。

javascript関数にHashMapを送信するのではなく、JSONObjectとして送信する必要があります。通常のJSONObjectのオブジェクトと似ているのではなく、NativeJSONオブジェクトの形をしたObjectです。

Object nativeJsonObject= NativeJSON.parse(rhino,scope,controlValueJsonString,new NullCallable()); 

、 サイ - RhinoのContextオブジェクト。 scope - スクリプト可能なオブジェクト controlValueJsonString - HashMapに相当するJSON文字列。 (controlValueJsonString =新しいGson()toJson(ハッシュマップが);)

NullCallableは(Rhinoの org.mozilla.javascript.Callableからパッケージ)

この 'nativeJsonObject' は渡す必要があり、コーラブルから実装クラスでありますJavaScript関数に。などの値を取得することができますJavaScriptのJSONオブジェクトから

Object[] params = new Object[] { controlValues }; 

var valueSelected = controlValues['country']; 

これは私のために働いています。本当に私はこの質問に投票した理由を知らない。 管理者、この問題に注意してください。あなたがNullCallableクラスを実装する必要はありません

0

複雑なオブジェクトのデータにアクセスする唯一の方法は、そのインタフェースを使用することです。 AndroidとiOS用に別々のソリューションを作成する必要があります。

typeofオペレータは、これらのケースを切り替える手助けをする必要があります。

+0

私の要件は、Androidで上記のjavascriptを実行することです。 get()メソッドは純粋にjavaです。ハッシュマップ – AndEngine

+0

から値を取得するためにhashmap ['key']メソッドを実行しない理由は、マップがjsオブジェクトではないためです。値はフィールドに保存されません。 – F43nd1r

+0

これを達成する方法はありますか?私は、JavaのHashMapを持って、javascriptの関数に送信する必要があります。 – AndEngine

関連する問題