2011-11-17 15 views
5

नहीं कहा जा रहा है मैंने एक एंड्रॉइड फोनगैप प्लगइन विकसित किया है। प्लगइन सफलतापूर्वक बुलाया जा रहा है, लेकिन कॉलबैक बुलाया नहीं जा रहा है। मुझे नहीं पता कि मुझे कुछ याद आया है।फोनगैप एंड्रॉइड प्लगइन: सफलता और विफलता कॉलबैक

क्या किसी के पास कोई विचार है कि कॉलबैक क्यों नहीं आ रहा है, तो क्या गलत हो सकता है?

जे एस फ़ाइल सामग्री:

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()); 
}); 

जावा फ़ाइल:

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

किसी भी मदद की: प्लग-इन कॉल करने के लिए

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; 
    } 
} 

एचटीएमएल कोड

के बाद मेरी कोड है अत्यधिक सराहना की है।

धन्यवाद।

उत्तर

1

आपके उत्तरों के लिए धन्यवाद दोस्तों।

चूंकि समस्या हल नहीं हो रही थी, इसलिए मैंने एक नई टेस्ट प्रोजेक्ट को फिर से बनाया और यह सुनिश्चित करने के लिए चरण-दर-चरण चला गया कि कोड का प्रत्येक छोटा टुकड़ा ठीक से काम करता है और धीरे-धीरे प्लगइन के लिए वांछित लक्ष्य में स्थानांतरित हो जाता है।

अंत में मैंने इसे बनाई गई नई परियोजना के साथ काम किया और प्लगइन को स्क्रैच से फिर से लिखना शुरू कर दिया।

धन्यवाद।

+0

बस जानकारी जोड़ने के लिए: आपकी समस्या यह थी कि सॉक्स को कॉल करने या PhoneGap.exec कॉल में विफल होने के बजाय, आप केवल कंसोल पर लॉग इन कर रहे थे – scooterman

1

जब आप कहते हैं कि यह निश्चित रूप से मूल कोड चला रहा है, तो आप इसे कैसे जानते हैं? क्या आप Log.d को देख रहे हैं या क्या आप वास्तव में ब्रेक पॉइंट डाल रहे हैं और पीछे हट रहे हैं और देख रहे हैं कि रिटर्न परिणाम क्या है; लाइन निष्पादित की जा रही है?

इसके अलावा, आप किस फोनगैप का उपयोग कर रहे हैं?

+0

मैंने कोड को फोनगैप 1.2 में अपडेट किया। हां, मैंने 'log.d' डाला है जैसा कि आप कोड में देख सकते हैं, और मैं आउटपुट देख पा रहा हूं। हालांकि, कॉलबैक में 'console.log' मुद्रित नहीं हो रहा है। कोई उपाय? –

+1

बस एक विचार, आप किस डिवाइस पर इसका परीक्षण कर रहे हैं? मुझे पता है कि सभी डिवाइस console.log वास्तव में लॉगकैट में दिखाई नहीं देते हैं (जैसे एचटीसी डिजायर एचडी)। उन्हें अलर्ट में बदलने का प्रयास करें और देखें कि वे क्या दिखते हैं। –

1

आप PhoneGap 1.2 उपयोग कर रहे हैं आप लाइन को दूर करना चाहिए:

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

के रूप में यह आवश्यक नहीं है। साथ ही, आपको शायद अपनी .js फ़ाइल के नीचे PhoneGap.addConstructor() को ले जाना चाहिए।

डीन गलत नहीं है क्योंकि एचटीसी जैसे कुछ डिवाइस हैं जो console.log ठीक से काम नहीं करता है, साथ ही एंड्रॉइड का कौन सा संस्करण आप परीक्षण कर रहे हैं?

+0

हाय साइमन, मैंने अपना जेएस कोड अपडेट किया। आप सही हैं, 'प्लगइन प्रबंधक' फोनगैप 1.2 के साथ त्रुटि दे रहा था। मैंने प्रश्न में एचटीएमएल कोड जोड़ा। और 'console.log' आउटपुट लॉगकैट में देखा जाता है। मैं सैमसंग गैलेक्सी टैब 10.1 (एंड्रॉइड संस्करण 3.1) पर परीक्षण कर रहा हूं। धन्यवाद। –

संबंधित मुद्दे