Плагин PhoneGap для Android: обратный вызов не срабатывает - PullRequest
5 голосов
/ 17 ноября 2011

Я разработал плагин Android PhoneGap. Плагин успешно вызывается, но обратный вызов не вызывается. Я понятия не имею, где я что-то пропустил.

Кто-нибудь знает, что может быть не так, когда обратный вызов не вызывается?

Ниже мой код:

Содержимое файла 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');
                    }
                );
            }

Любая помощь высоко ценится.

Спасибо.

Ответы [ 3 ]

1 голос
/ 17 ноября 2011

Если вы используете PhoneGap 1.2, вы должны удалить строку:

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

, так как она не требуется.Кроме того, вам, вероятно, следует переместить PhoneGap.addConstructor () в конец файла .js.

Дин не ошибается, поскольку есть такие устройства, как HTC, на которых console.log также не работает должным образомс какой версией Android вы тестируете?

1 голос
/ 18 ноября 2011

Спасибо, ребята, за ваши ответы.

Поскольку проблема не решалась, я воссоздал новый тестовый проект и пошёл шаг за шагом, чтобы убедиться, что каждый маленький кусочек кода работает правильно и медленно перемещался вжелаемая цель для плагина.

Наконец-то я начал работать над созданным мною новым проектом и снова написал плагин с нуля.

Спасибо.

1 голос
/ 17 ноября 2011

Когда вы говорите, что он определенно выполняет собственный код, как вы это узнаете? Видите ли вы Log.d или вы действительно ставите точку останова, проходите и смотрите, есть ли результат возврата; строка выполняется?

Кроме того, какую версию телефонной связи вы используете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...