Cordova插件me.apla.cordova.app-preferences - 成功回调有时没有被触发

时间:2014-06-17 11:28:45

标签: android cordova plugins

这是关于Cordova插件“me.apla.cordova.app-preferences”的使用,该插件用于保存和检索应用程序首选项(Android中的SharedPreferences和iOS中的NSUserDefaults)。在尝试获取以前保存的值时,有时候iOS和Android都没有触发成功回调或失败回调。但有时它会成功发射。这是一种奇怪的行为。以下是我用于使用插件检索值的JS代码片段:

var prefs = window.plugins.appPreferences; prefs.fetch(prefReadSucess, prefReadFailed, 'key');


function prefReadSucess(value) {
    // handle success call back
}

function prefReadFailed(error) {
    // handle failure callback
}

插件的jave代码是,

private boolean fetchValueByKey(final String key, final CallbackContext callbackContext) {
    cordova.getThreadPool().execute(new Runnable() {public void run() {

    SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(cordova.getActivity());
    String returnVal = null;
    if (sharedPrefs.contains(key)) {
        Object obj = sharedPrefs.getAll().get(key);
        String objClass = obj.getClass().getName();
        if (objClass.equals("java.lang.Integer")) {
            returnVal = obj.toString();
        } else if (objClass.equals("java.lang.Float") || objClass.equals("java.lang.Double")) {
            returnVal = obj.toString();
        } else if (objClass.equals("java.lang.Boolean")) {
            returnVal = (Boolean)obj ? "true" : "false";
        } else if (objClass.equals("java.lang.String")) {
            if (sharedPrefs.contains("_" + key + "_type")) {
                // here we have json encoded string
                returnVal = (String)obj;
            } else {
                String fakeArray = null;
                try {
                    fakeArray = new JSONStringer().array().value((String)obj).endArray().toString();
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    callbackContext.error(0);
                    return;
                }
                returnVal = fakeArray.substring(1, fakeArray.length()-1);
                // returnVal = new JSONStringer().value((String)obj).toString();
            }

        } else {
            Log.d("", "unhandled type: " + objClass);
        }
        // JSONObject jsonValue = new JSONObject((Map) obj);
        callbackContext.success(returnVal);
    } else {
    }

    }});

    return true;
}

当我从java代码中注释该行时,它正常工作

cordova.getThreadPool()。execute(new Runnable(){public void run(){

我尝试在行

之前打印 returnVal 的值

callbackContext.success(returnVal);

我总是得到价值。但是有一段时间成功回电并没有解雇, 我确保在“设备就绪”事件之后或之后访问该插件。任何形式的帮助都表示赞赏。

0 个答案:

没有答案