[英]Multiple Shared Preference not saving/displaying data
我搜索了很長時間,但仍無濟於事,因為我仍然不知道為什么它不起作用。
我已經在一個活動和另一個活動之間使用了SharedPreference
碼:
保存數據
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("email", email.getEmail().toString());
editor.apply();
檢索數據
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String userEmail = preferences.getString("email", "defaultValue");
DisplayEmail.setText(userEmail);
這段代碼工作正常。 但是現在,當轉到另一個共享首選項時,會發生這種情況:
java.lang.RuntimeException:無法啟動活動ComponentInfo {com.example.nathan.application / com.example.nathan.application.ActCamera}:java.lang.IndexOutOfBoundsException:索引:0,大小:0,位於android.app.ActivityThread .performLaunchActivity(ActivityThread.java:2796)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2867)在android.app.ActivityThread.-wrap12(ActivityThread.java)在android.app.ActivityThread $ H.handleMessage(ActivityThread) .java:1570),位於android.os.Handler.dispatchMessage(Handler.java:105),位於android.os.Looper.loop(Looper.java:156),位於android.app.ActivityThread.main(ActivityThread.java:6595)在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:942)的java.lang.reflect.Method.invoke(本機方法)處在com.android.internal.os.ZygoteInit.main(ZygoteInit。 java:832)原因:java.lang.IndexOutOfBoundsException:索引:0,大小:0
由於此錯誤的代碼:
double Latitude = loc.getLatitude();
double Longitude = loc.getLatitude();
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = preferences.edit();
editor.putString("Country", details.doInBackground().toString());
editor.putLong("Latitude", Double.doubleToRawLongBits(Latitude));
editor.putLong("Longitude", Double.doubleToRawLongBits(Longitude));
editor.apply();
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
Latitude = Double.longBitsToDouble(preferences.getLong("Latitude", 0));
Longitude = Double.longBitsToDouble(preferences.getLong("Longitude", 0));
在某些情況下,getDefaultSharedPreferences在不同的應用程序上下文中無法按預期工作。
我建議您使用:
Context mContext = getApplicationContext();
SharedPreferences preferences = mContext.getSharedPreferences("your_shared_preferences_name", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
多個共享首選項不保存/顯示數據
這稱為多 進程 應用程序 ,您可以在清單類中定義兩個或多個進程 。 如其文檔中所述,目前無法安全地在多個進程上訪問SharedPreferences
。
解決方案:
如果要使用多進程,將使用基於數據庫的庫托盤而不是SharedPreference。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.