2011-11-17 85 views
5

我開發了一個Android PhoneGap插件。該插件成功地被調用,但回調沒有被調用。我不知道我錯過了什麼。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; 
    } 
} 

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

只是爲了添加信息:您的問題是,不是調用成功或在PhoneGap.exec調用失敗,您只是登錄到控制檯 – scooterman

1

當你說它肯定運行本機代碼時,你怎麼知道這一點?你是否看到Log.d's,或者實際上是在放置一個斷點並逐步查看返回結果;線正在執行?

此外,你使用哪個版本的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文件的底部。

Dean並沒有錯,因爲像HTC那樣的一些設備console.log無法正常工作,以及您測試的Android版本是什麼?

+0

嗨西蒙,我更新了我的JS代碼。你是對的,'PluginManager'給PhoneGap 1.2帶來了錯誤。我將HTML代碼添加到問題中。在Logcat中可以看到'console.log'輸出。我正在測試三星Galaxy Tab 10.1(Android版本3.1)。謝謝。 –

相關問題