簡體   English   中英

多個共享首選項不保存/顯示數據

[英]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。

https://github.com/grandcentrix/tray

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM