已覆盖保存的偏好设置

时间:2016-12-05 09:53:26

标签: android android-preferences

我正在编写一个应用程序来模拟用于环境监测的仪器,使用GPS信息对测量数据进行建模(https://github.com/sickel/measem)。在这个应用程序中,我希望用户能够在给定位置定义点源。此位置的纬度/经度将存储在共享首选项中。应通过在设置中键入lat和lon(使用首选项API)或通过重新定位gpslocation来定义该点。具有设置的部分工作正常,我也可以从gps读取位置,但是一旦应用暂停,该数据集就会被首选项编辑器中的数据覆盖。

我存储值的代码是:

SharedPreferences sp=this.getPreferences(Context.MODE_PRIVATE); 
SharedPreferences.Editor ed=sp.edit(); 
ed.putString("Latitude",lat); 
ed.putString("Longitude",lon); 
ed.apply();

我也试过ed.commit();除了申请,但结果相同。如何使用我在此处存储的内容更新首选项编辑器中显示的内容?

我的onPause对首选项没有任何作用,只是做了其他一些内务处理:

public void onPause() { 
  super.onPause(); 
  timer.cancel(); 
  timer.purge(); 
  h2.removeCallbacks(run); 
  Button b = (Button)findViewById(R.id.button); 
  b.setText("start"); 
} 

我正在设置此功能的首选项中的值

private void readPrefs(){ 
  SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); 
  String ret=sharedPref.getString("Latitude", "1"); 
  Double lat= Double.parseDouble(ret); 
  ret=sharedPref.getString("Longitude", "1"); 
  Double lon= Double.parseDouble(ret); 
  there.setLatitude(lat); 
  there.setLongitude(lon); 
}

这是从onResume()和onActivityResult()调用的。我正在使用SettingsFragment来设置菜单。

1 个答案:

答案 0 :(得分:1)

docs中的

getPreferences

  

检索SharedPreferences对象以访问其中的首选项   私人参加此活动。这只是调用底层证券   通过传入此活动的getSharedPreferences(String,int)方法   类名作为首选项名称。

由于你试图让他们参与不同的活动,我怀疑你实际上是指两个不同的共享偏好,意味着两个不同的文件。因此,我建议您在获取和放置时使用相同的方法来获取SharedPreferences实例。 PreferenceManager.getDefaultSharedPreferences(context)应该像context.getPreferences("NAME", Context.MODE_PRIVATE)一样完成工作。如果是第二个,我建议保留名称作为资源,以确保它是一致的。