我搜索了很长时间但无济于事,因为我仍然不知道它为什么不起作用。
我已经在一个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:Index:0,Size: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) at java.lang.reflect.Method.invoke(Native Method) 在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));
答案 0 :(得分:0)
有些情况下,getDefaultSharedPreferences在不同的应用程序上下文中无法正常工作。
我建议您使用:
Context mContext = getApplicationContext();
SharedPreferences preferences = mContext.getSharedPreferences("your_shared_preferences_name", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
答案 1 :(得分:0)
多个共享首选项不保存/显示数据
这称为多进程 应用,您可以在其中定义清单类中的两个或更多进程。目前无法安全访问多个进程SharedPreferences
,如documentation所述。
解决方案:
如果您想使用多进程,则将使用基于数据库的库托盘而不是SharedPreference。