首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖保存的首选项

覆盖保存的首选项
EN

Stack Overflow用户
提问于 2016-12-05 09:53:26
回答 1查看 76关注 0票数 0

我正在编写一个应用程序来模拟环境监测仪器,使用GPSinformation对测量数据(https://github.com/sickel/measem)进行建模。在这个应用程序中,我希望用户能够在给定的位置定义一个点源。此位置的lat / lon将存储在共享首选项中。点应该通过在设置中输入lat和lon (使用preferences API)来定义,或者通过在API位置中的reding来定义。设置的部分工作良好,我也可以从gps读取位置,但当应用程序暂停时,数据集就会被首选项编辑器中的数据覆盖。

我存储这些值的代码是:

代码语言:javascript
复制
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对偏好没有任何作用,它只是做一些其他的家务:

代码语言:javascript
复制
public void onPause() { 
  super.onPause(); 
  timer.cancel(); 
  timer.purge(); 
  h2.removeCallbacks(run); 
  Button b = (Button)findViewById(R.id.button); 
  b.setText("start"); 
} 

我正在从这个函数中的首选项中设置值。

代码语言:javascript
复制
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进行设置。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-05 10:45:18

getPreferences中的文档

检索SharedPreferences对象,以访问此活动的私有首选项。这只是通过传入该活动的类名作为首选项名称来调用基础getSharedPreferences(String,int)方法。

由于您试图在不同的活动中获得它们,我怀疑您实际上是指两个不同的共享首选项,即两个不同的文件。因此,我建议您在获取和放置时使用相同的方法获取SharedPreferences实例。PreferenceManager.getDefaultSharedPreferences(context)应该和context.getPreferences("NAME", Context.MODE_PRIVATE)一样做好工作。如果是第二个,我建议保留名称作为一个资源,以确保它是一致的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40971457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档