【问题标题】:Multiple Shared Preference not saving/displaying data多个共享首选项不保存/显示数据
【发布时间】:2018-05-17 16:58:01
【问题描述】:

我搜索了很长时间,但没有成功,因为我仍然不知道为什么它不起作用。

我已经在一个 Activity 和另一个 Activity 之间使用 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) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942) 在 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));

【问题讨论】:

标签: java android sharedpreferences indexoutofboundsexception


【解决方案1】:

在某些情况下,getDefaultSharedPreferences 在不同的应用上下文中无法按预期工作。

我建议你使用:

Context mContext = getApplicationContext();
SharedPreferences preferences = mContext.getSharedPreferences("your_shared_preferences_name", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();

【讨论】:

  • 我还是一样的结果:/
  • 您确定这是 sharedPreferences 的问题,而不是获取位置坐标的问题吗?
  • 它们被预先显示在一个 textView 中,它必须与 sharedPreferences 一起使用
  • 你能解决这个问题@user7943吗?
  • 您使用的解决方案是什么? @user7943
【解决方案2】:

多个共享首选项不保存/显示数据

这称为multiprocess app,您可以在其中定义清单类中的两个或多个进程。目前无法在多个进程上安全访问SharedPreferences,如其documentation 中所述。

解决方案:

如果您想使用多进程,您将使用基于数据库的库托盘而不是 SharedPreference。

https://github.com/grandcentrix/tray

【讨论】:

    猜你喜欢
    • 2019-08-02
    • 1970-01-01
    • 2019-04-09
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多