我正在编写一个应用程序来模拟环境监测仪器,使用GPSinformation对测量数据(https://github.com/sickel/measem)进行建模。在这个应用程序中,我希望用户能够在给定的位置定义一个点源。此位置的lat / lon将存储在共享首选项中。点应该通过在设置中输入lat和lon (使用preferences API)来定义,或者通过在API位置中的reding来定义。设置的部分工作良好,我也可以从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();但是结果是相同的。如何用我在这里存储的内容更新从preferences编辑器中看到的内容?
我的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进行设置。
发布于 2016-12-05 10:45:18
getPreferences中的文档
检索SharedPreferences对象,以访问此活动的私有首选项。这只是通过传入该活动的类名作为首选项名称来调用基础getSharedPreferences(String,int)方法。
由于您试图在不同的活动中获得它们,我怀疑您实际上是指两个不同的共享首选项,即两个不同的文件。因此,我建议您在获取和放置时使用相同的方法获取SharedPreferences实例。PreferenceManager.getDefaultSharedPreferences(context)应该和context.getPreferences("NAME", Context.MODE_PRIVATE)一样做好工作。如果是第二个,我建议保留名称作为一个资源,以确保它是一致的。
https://stackoverflow.com/questions/40971457
复制相似问题