【问题标题】:Retrieving SharedPreferences in Android在 Android 中检索 SharedPreferences
【发布时间】:2015-06-16 12:23:49
【问题描述】:

我正在构建我的第一个多活动应用程序。我在 Activity1 中有一些由用户定义并保存到SharedPreferences 的地理坐标:

// these strings are used when saving the users' preferred location
private static final String POINT_LATITUDE_KEY = "POINT_LATITUDE_KEY";
private static final String POINT_LONGITUDE_KEY = "POINT_LONGITUDE_KEY";

private static final String TAG = "Activity1";
// actually saves the coordinates to the preferences 
private void saveCoordinatesInPreferences(float latitude, float longitude) {
    SharedPreferences prefs = 
       this.getSharedPreferences(getClass().getSimpleName(),
                       Context.MODE_PRIVATE);
    SharedPreferences.Editor prefsEditor = prefs.edit();
    prefsEditor.putFloat(POINT_LATITUDE_KEY, latitude);
    prefsEditor.putFloat(POINT_LONGITUDE_KEY, longitude);
    //Log.i(TAG, "latitude is: " + latitude);
    //Log.i(TAG, "longitude is: " + longitude);
    prefsEditor.commit();
}

这些 SharedPreferences 坐标随后需要被 Activity2 使用。我无法找回它们。这是我为检索而编写的方法。我的变量latitude 没有写入log

private static final String TAG = "Activity2";

protected void getLatLongPref() {
// adapted from http://mrbool.com/android-shared-preferences-managing-files-using-internal-external-storage/30508
// accessed April 10, 2015
    SharedPreferences pref = getApplicationContext().getSharedPreferences("POINT_LATITUDE_KEY", MODE_PRIVATE);
    float latitudeUser = pref.getFloat("POINT_LATITUDE_KEY", 0); // getting users chosen latitude   
    Log.i(TAG, "latitude is: " + latitudeUser);

}

你认为我做错了什么?

【问题讨论】:

  • 尝试在您的两个活动中使用this.getDefaultSharedPreferences()。另外,您的第一个代码 sn-p 中的 POINT_LATITUDE_KEY 字符串是什么?另外,请参阅here 了解如何查看实际放入 SharedPrefs 的内容(无需解析 xml)。
  • @JonasCz 啊抱歉,POINT_LATITUDE_KEYPOINT_LONGITUDE_KEY 是我定义的要添加到首选项的键。我已经编辑了我的问题
  • @JonasCz this.getDefaultSharedPreferences() 不可用,您链接中提到的 DDMS 文件夹为空

标签: java android android-activity sharedpreferences


【解决方案1】:

您为两个共享首选项使用了错误的上下文和首选项名称。将第一个更改为:

SharedPreferences prefs = getApplicationContext().getSharedPreferences("POINT_LATITUDE_KEY",
                       Context.MODE_PRIVATE);

【讨论】:

  • 这行得通。你刚刚击败了@JonasCz!谢谢两位。所以总而言之,我正在创建 2 个pref 对象:SharedPreferences prefLat = this.getSharedPreferences("POINT_LATITUDE_KEY", Context.MODE_PRIVATE); SharedPreferences prefLong = this.getSharedPreferences("POINT_LONGITUDE_KEY", Context.MODE_PRIVATE);
  • @mark,你应该在这两种情况下使用相同的首选项名称,同时放置数据和获取数据。
【解决方案2】:

像这样更改您的第一个代码 sn-p:

private void saveCoordinatesInPreferences(float latitude, float longitude) {
    SharedPreferences prefs = 
       this.getSharedPreferences("myPref", Context.MODE_PRIVATE);
    [...]
}

...你的第二个是这样的:

protected void getLatLongPref() {
    SharedPreferences pref = 
       this.getSharedPreferences("myPref", Context.MODE_PRIVATE);
    [...]
}

基本上,这两种情况都必须相同。另见this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多