我正在编写一个应用程序来模拟用于环境监测的仪器,使用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来设置菜单。
答案 0 :(得分:1)
getPreferences
:
检索SharedPreferences对象以访问其中的首选项 私人参加此活动。这只是调用底层证券 通过传入此活动的getSharedPreferences(String,int)方法 类名作为首选项名称。
由于你试图让他们参与不同的活动,我怀疑你实际上是指两个不同的共享偏好,意味着两个不同的文件。因此,我建议您在获取和放置时使用相同的方法来获取SharedPreferences
实例。 PreferenceManager.getDefaultSharedPreferences(context)
应该像context.getPreferences("NAME", Context.MODE_PRIVATE)
一样完成工作。如果是第二个,我建议保留名称作为资源,以确保它是一致的。