2011-11-17 7 views
5

私はAndroid PhoneGap Pluginを開発しました。プラグインが正常に呼び出されていますが、コールバックが呼び出されていません。私は何かを逃したのか分からない。PhoneGap Androidプラグイン:成功と失敗コールバックが呼び出されない

誰かがコールバックが呼び出されていないときに何が間違っている可能性について考えていますか?続き

は私のコードです:

JSファイルの内容:

var SharedPreferencePlugin = function() {}; 

SharedPreferencePlugin.prototype.getvalues = function(content, success, fail) { 
    return PhoneGap.exec( 
     function(args) { 
      console.log("success called from plugin's js file");  
     }, 
     function(args) { 
      console.log("failure called from plugin's js file"); 
     }, 
     'SharedPreferencePlugin', 
     'getvalues', 
     [content] 
    ); 
}; 

SharedPreferencePlugin.prototype.update = function(itemName, success, fail) { 
    return PhoneGap.exec( 
     function(args) { 
      console.log("success called from plugin's js file");  
     }, 
     function(args) { 
      console.log("failure called from plugin's js file"); 
     }, 
     'SharedPreferencePlugin', 
     'update', 
     [itemName] 
    ); 
}; 

PhoneGap.addConstructor(function() { 
    PhoneGap.addPlugin('SharedPreferencePlugin', new SharedPreferencePlugin()); 
}); 

Javaファイル:

public class SharedPreferencePlugin extends Plugin{ 

    public static final String GET_ACTION = "getvalues"; 
    public static final String UPDATE_ACTION = "update"; 
    static Context staticContext = MainActivity.staticContext; 
    SharedPreferences dataStorage = staticContext.getSharedPreferences(MainActivity.PREFS_NAME, 0); 

    public PluginResult execute(String action, JSONArray data, String callbackId) 
    { 
     Log.d("SharedPreferencePlugin", "Plugin Called with action: " + action); 
     PluginResult result = null; 
     if(action.equals(GET_ACTION)) 
     { 
      Log.d("SharedPrferencePlugin", "inside if for 'getvalues'"); 
      JSONArray savedData = getPreferences(); 
      Log.d("SharedPreferencePlugin", "Data: " + savedData); 
      result = new PluginResult(Status.OK, savedData); 
     } 
     else if(action.equals(UPDATE_ACTION)) 
     { 
      try 
      { 
       updateSharedPreferences(data.getJSONObject(0).getString("itemName")); 
       JSONObject jsonObject = new JSONObject(); 
       jsonObject.put("status", "success"); 

       result = new PluginResult(PluginResult.Status.OK, jsonObject); 
      } 
      catch(JSONException ex) 
      { 
       Log.d("SharedPreferencePlugin", "Got JSONException: " + ex.getMessage()); 
       result = new PluginResult(PluginResult.Status.JSON_EXCEPTION); 
      } 
     } 
     else 
     { 
      result = new PluginResult(PluginResult.Status.JSON_EXCEPTION); 
      Log.d("SharedPreferencePlugin", "Invalid action: " + action + " obtained."); 
     } 
     return result; 
    } 

    public void updateSharedPreferences(String itemName) 
    { 
     Log.d("SharedPreferencePlugin", "Inside updateSharedPreferences, value passed: " + itemName); 
     SharedPreferences tmpPreferenceReference = staticContext.getSharedPreferences(MainActivity.PREFS_NAME, 0); 
     SharedPreferences.Editor editor = tmpPreferenceReference.edit(); 

     if(itemName.equals(tmpPreferenceReference.getString(MainActivity.NAME_ITEM1, ""))) 
     { 
      Integer tmpInt = Integer.parseInt(tmpPreferenceReference.getString(MainActivity.QUANTITY_ITEM1, "0")) - 1; 
      editor.putString(MainActivity.QUANTITY_ITEM1, tmpInt.toString()); 
     } 
     editor.commit(); 
    } 

    protected JSONArray getPreferences() 
    { 
     ArrayList<String> arrItemNames = new ArrayList<String>(); 
     ArrayList<String> arrItemQuantities = new ArrayList<String>(); 

     arrItemNames.add(0, dataStorage.getString(MainActivity.NAME_ITEM1, "")); 
     arrItemNames.add(1, dataStorage.getString(MainActivity.NAME_ITEM2, "")); 
     arrItemQuantities.add(0, dataStorage.getString(MainActivity.QUANTITY_ITEM1, "")); 
     arrItemQuantities.add(0, dataStorage.getString(MainActivity.QUANTITY_ITEM2, "")); 

     //------------------------------------------------------------------- 
     ArrayList<ArrayList> tempArrayList = new ArrayList<ArrayList>(); 
     tempArrayList.add(arrItemNames); 
     tempArrayList.add(arrItemQuantities); 

     JSONArray jsonData = new JSONArray(tempArrayList); 
     //------------------------------------------------------------------- 

     return jsonData; 
    } 
} 

PLUGINを呼び出すためのHTMLコード:

function test() 
      { 
       console.log("Test called"); 
       window.plugins.SharedPreferencePlugin.getvalues({}, 
        function() { // Success function 
         console.log("success called"); 
        }, 
        function() { // Failure function 
         console.log('Share failed'); 
        } 
       ); 
      } 

すべてのヘルプ非常に高く評価されています。

ありがとうございました。

答えて

1

ありがとうございました。

問題が解決していないので、私は新しいテストプロジェクトを再作成し、コードの小さな部分が正しく機能し、プラグインの目的の目標にゆっくりと移動するように段階的に進みました。

私は最終的に私が作成した新しいプロジェクトに取り組み、プラグインを一から書き直しました。

ありがとうございました。

+0

ちょうど情報を追加する:あなたの問題は、succesを呼び出すか、PhoneGap.exec呼び出しで失敗するのではなく、コンソール – scooterman

1

あなたがネイティブコードを確実に実行していると言うと、どうやってこれを知っていますか?あなたはLog.dを見ていますか、実際にはブレークポイントを入れて、ステップ実行して戻り結果が見えるかどうかを確認していますか?行が実行されていますか?

また、どのバージョンのphonegapを使用していますか?

+0

コードをPhonegap 1.2に更新しました。はい、私はあなたがコードで見ることができるように 'Log.d'を挿入しました、そして、私は出力を見ることができます。しかし、コールバックの 'console.log'は印刷されません。何か案が? –

+1

これをテストしているデバイスは何ですか?私は、すべてのデバイスconsole.logが実際にlogcatに表示されているわけではないことを知っています(HTC Desire HDなど)。アラートに変更し、表示されるかどうか確認してください。 –

1

あなたはPhoneGapの1.2を使用している場合は、行削除する必要があります。それを必要としないよう

PluginManager.addService("SharedPreferencePlugin","com.devapps.mmvspinningwheel.SharedPreferencePlugin"); 

を。また、おそらくPhoneGap.addConstructor()を.jsファイルの一番下に移動する必要があります。

HTCのような、console.logが正しく動作しないデバイスや、Androidのどのバージョンをテストしているのかなど、Deanは間違いではないですか?

+0

こんにちはSimon、JSコードを更新しました。あなたが正しいです、 'PluginManager'はPhoneGap 1.2でエラーを出していました。質問にHTMLコードを追加しました。 'console.log'の出力がLogcatに表示されます。私はサムスンギャラクシータブ10.1(Androidバージョン3.1)でテストしています。ありがとう。 –

関連する問題