Java 多个共享首选项未保存/显示数据
我找了很长一段时间,但毫无结果,因为我仍然不知道为什么它不起作用 我已经在一个活动和另一个活动之间使用SharedReference 代码: 保存数据Java 多个共享首选项未保存/显示数据,java,android,sharedpreferences,indexoutofboundsexception,Java,Android,Sharedpreferences,Indexoutofboundsexception,我找了很长一段时间,但毫无结果,因为我仍然不知道为什么它不起作用 我已经在一个活动和另一个活动之间使用SharedReference 代码: 保存数据 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor editor = preferences.edit(); editor.putString("email"
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:无法启动活动组件信息{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));
有些情况下,GetDefaultSharedReferences在不同的应用程序上下文中无法按预期工作 我建议您使用:
Context mContext = getApplicationContext();
SharedPreferences preferences = mContext.getSharedPreferences("your_shared_preferences_name", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
多个共享首选项未保存/显示数据
这称为多进程应用程序,您可以在清单类中定义两个或多个进程。如its中所述,目前无法在多个进程上安全访问SharedReferences
解决方案:
如果要使用多进程,您将使用基于数据库的库托盘,而不是SharedReference
为什么不使用您自己的SharedRefer文件?类似这样的->我仍然有相同的结果:/n您确定SharedReferences有问题,而不是获取位置坐标?它们事先会显示在textView中,必须使用SharedReferences才能解决这个问题@user7943?您使用的解决方案是什么@用户7943