Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多个共享首选项未保存/显示数据_Java_Android_Sharedpreferences_Indexoutofboundsexception - Fatal编程技术网

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

Java 多个共享首选项未保存/显示数据,java,android,sharedpreferences,indexoutofboundsexception,Java,Android,Sharedpreferences,Indexoutofboundsexception,我找了很长一段时间,但毫无结果,因为我仍然不知道为什么它不起作用 我已经在一个活动和另一个活动之间使用SharedReference 代码: 保存数据 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor editor = preferences.edit(); editor.putString("email"

我找了很长一段时间,但毫无结果,因为我仍然不知道为什么它不起作用

我已经在一个活动和另一个活动之间使用SharedReference

代码:

保存数据

  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