2011-03-26 36 views
3

我试图在一个活动中保存一些过滤器/状态,然后在下一个活动中使用该数据。SharedPreferences不适用于所有活动

我使用SharedPreferences,但它不像我预期的那样工作。


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进行开发。

+0

是因为在你的第二个活动的要求RestaurantFilterActivity.PreferenceKey.DISTANCE但在第一个活动,你将它保存FilterActivity.PreferenceKey.DISTANCE下?或者是一个错字:-) – Blundell 2011-03-26 12:07:21

+0

您的日志输出实际上显示它没有得到保存开始。你是否检查过Double.toString(distance);是不是null? – Blundell 2011-03-26 12:08:37

+0

错字,现在在问题中修复,对不起。 – barryred 2011-03-26 12:10:03

回答

7

在下面的两行,被返回

preferences.edit().putString(PreferenceKey.DISTANCE, distance); 
preferences.edit().commit(); 

两个不同SharedPreferences.Editor秒。因此,价值没有被承诺。相反,你必须使用:

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

这是固定的! 谢谢。我看到的例子确实使用了你所建议的模式,但没有意识到这是一个要求。 傻我。 谢谢! – barryred 2011-03-26 12:42:58

+0

干得好,知道它是走到某个简单的 – Blundell 2011-03-26 15:16:04

+0

你也可以使用一个oneliner:'preferences.edit()。putString(PreferenceKey.DISTANCE,distance).commit();' – Keelan 2015-04-04 14:22:45

相关问题