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