Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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 - Fatal编程技术网

Java 共享引用不跨活动工作

Java 共享引用不跨活动工作,java,android,sharedpreferences,Java,Android,Sharedpreferences,我试图在一个活动中保存一些过滤器/状态,然后在下一个活动中使用这些数据 我正在使用SharedReferences,但它并没有像我预期的那样工作 public class FilterActivity extends Activity { private static final String TAG = FilterActivity.class.getName(); EditText distanceEditor; @Override public void onPau

我试图在一个活动中保存一些过滤器/状态,然后在下一个活动中使用这些数据

我正在使用SharedReferences,但它并没有像我预期的那样工作


public class FilterActivity extends Activity {

  private static final String TAG = FilterActivity.class.getName();

  EditText distanceEditor;

  @Override
  public void onPause() {
    super.onPause();
    SharedPreferences preferences = getSharedPreferences(PreferenceKey.FILTER_PREFERENCES_NAME, MODE_WORLD_READABLE);
    String distance = distanceEditor.getText().toString();
    preferences.edit().putString(PreferenceKey.DISTANCE, distance);
    preferences.edit().commit();
    Log.i(TAG, "Wrote max-distance=" + distance);

    Log.i(TAG, "Preferences contains distance=" + preferences.getString(PreferenceKey.DISTANCE, "FAIL"));
  }


  public static class PreferenceKey {
    public static final String FILTER_PREFERENCES_NAME = "FilterActivity:" + "Filter_Preference_File";
    public static final String DISTANCE = "FilterActivity:" + "DISTANCE";
  }
}
然后,应使用此首选项的活动:


public class MapActivity  extends MapActivity {
  @Override
  public void onResume() {
    super.onResume();

    SharedPreferences preferences = getSharedPreferences(FilterActivity.PreferenceKey.FILTER_PREFERENCES_NAME, MODE_WORLD_READABLE);
    String maxDistance = preferences.getString(FilterActivity.PreferenceKey.DISTANCE, "FAIL");

    Log.i(TAG, "Read max-distance=" + maxDistance);
  }
}
但我得到的结果是:


.FilterActivity( 4847): Wrote max-distance=99.9
.FilterActivity( 4847): Preferences contains distance=FAIL
.MapActivity( 4847): Read max-distance=FAIL
有人能告诉我我做错了什么吗


我正在根据API Level-8进行开发。

在以下两行中

preferences.edit().putString(PreferenceKey.DISTANCE, distance);
preferences.edit().commit();
返回两个不同的
SharedReference.Editor
s。因此,没有提交该值。相反,您必须使用:

SharedPreferences.Editor spe = preferences.edit();
spe.putString(PreferenceKey.DISTANCE, distance);
spe.commit();

是因为在第二个活动中,您请求RestaurantFilterActivity.PreferenceKey.DISTANCE,但在第一个活动中,您将其保存在FilterActivity.PreferenceKey.DISTANCE下?或者这是一个输入错误:-)您的日志输出实际上显示它没有被保存。你检查过两次了吗;不是空的吗?输入错误,现在问题已经解决了,对不起。您需要其他应用程序来读取您的首选项吗?对于首选项模式,我只需要0或MODE_PRIVATE。p、 我还将super.onPause()移到Activity方法的底部。因为您希望在应用程序开始清理暂停之前运行特定于活动的代码。这就解决了!非常感谢。我看到的示例确实使用了您建议的模式,但没有意识到这是一个要求。我真傻。非常感谢。您还可以使用一行代码:
preferences.edit().putString(PreferenceKey.DISTANCE,DISTANCE.commit()