2 clcurie 11 clcurie_11 于 2013.04.26 17:07 提问

不同 activity 中的 SharedPreferences

我用下面的代码从 activity A 中加载 SharedPreferences:

private void SavePreferences(String key, String value){
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);

    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString(key, value);
    editor.commit();
   }

在 activity B 中我想加载 SharedPreferences。下面是一个异常 NullPointerException:

private void LoadPreferences(){   
       SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
       data = sharedPreferences.getString("name", "08:00") ;
   }

我用下面的代码,得到这个编译错误:"No enclosing instance of the type A is accessible in scope"

 private void LoadPreferences(){   
       SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(A.this);
       data = sharedPreferences.getString("name", "08:00") ;
   }

如何访问数据?谢谢!

2个回答

zxd_72
zxd_72   2013.04.28 10:46
已采纳

在两个 Activities 中把 this 替换为 getApplicationContext()
在Activity A 的 SharedPreferences 是下面的方式:

private void SavePreferences(String key, String value){
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(key, value);
        editor.commit();
        Intent sd=new Intent(this,Secongtess.class);
        startActivity(sd);
       }

Activity B 中按下面的方式获取值:

 private void LoadPreferences(){   
       SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
     String  data = sharedPreferences.getString("name", "08:00") ;
     Toast.makeText(this,data, Toast.LENGTH_LONG).show();
   }
CSDN_Ask
CSDN_Ask   2013.04.28 10:50

在 shared preferences 中存储值

SharedPreferences preferences==PreferenceManager.getDefaultSharedPreferences(this);
  SharedPreferences.Editor editor=preferences.edit();
  editor.putString("Name","Harneet");
  editor.commit();

从 shared preferences 中检索值:

SharedPreferences preferences==PreferenceManager.getDefaultSharedPreferences(this);
  String name=preferences.getString("Name","");
  if(!name.equalsIgnoreCase(""))
  {
    name=name+"  Sethi";  /* 编辑值 */
  }

从 sharedpreference 中编辑数据

SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
 editor.putString("text", mSaved.getText().toString());
 editor.putInt("selection-start", mSaved.getSelectionStart());
 editor.putInt("selection-end", mSaved.getSelectionEnd());
 editor.commit();

从 shared preference 中检索数据

SharedPreferences prefs = getPreferences(MODE_PRIVATE); 
String restoredText = prefs.getString("text", null);
if (restoredText != null) 
{
  //mSaved.setText(restoredText, TextView.BufferType.EDITABLE);
  int selectionStart = prefs.getInt("selection-start", -1);
  int selectionEnd = prefs.getInt("selection-end", -1);
  /*if (selectionStart != -1 && selectionEnd != -1)
  {
     mSaved.setSelection(selectionStart, selectionEnd);
  }*/
}
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
安卓--关于不同activity之间使用SharedPreferences
这几天初次学安卓,做了个记事本,想要存储当前账户以便在各个activity中使用, 当时试了下intent在不同activity之间传递数据,但是太麻烦,有时候非activity还不能用,尝试着用SharedPreferences。但是很快问题来了,有些activity中读取的值为空,并不能读取自己存进去的值,但是存取的时候已经commit了。 网上很多大神支了很多招,没成功。后来自己查看自己在不
SharedPreferences——不同的Activity间的preferences共享问题
今天是针对工作中的问题——sharedPreferences共享,进行自我解答,希望我的解答对我以后的开发,也对广大Android爱好者有帮助。 SharedPreferences作为一种本地存储方式,被多用于存储用户的配置信息,原理就是一个map,将要保存的信息保存到了一个xml配置文件中,相信凡是看我帖子的朋友,对sharedPreferences还是存在疑惑的,关于它的原理性的东东
android基础---如何使用sharedPreference进行多个Activity之间的读写操作
1.在一个Activity中使用sharedPreference进行数据的存储: Activity为:MainActivity.java,包名为:package com.example.agriculture; //初始化 private SharedPreferences sp=MainActivity.this.getSharedPreferences ("config",
sharedPreferences不同activity之间的数据共享
SharedPreferences是要依靠context的。在activity中使用,或者传入context上下文对象。// 第一步,获取SharedPreferences的编辑者 SharedPreferences sharedPreferences=getSharedPreferences("ceshi",
使用SharedPreferences实现Activity和Service之间数据同步问题
最近项目有使用service定时请求后台获取数据的需求。 所以就写了service,由于访问后台需要用到参数UserId(动态获取),所以使用了SharedPreferences来完成数据存储和获取。 在Activity中有关SharedPreferences的代码如下: SharedPreferences  settings= getApplicationContext().getShar
Android开发——Activity与Service之间使用SharedPreferences不同步问题解决
首先特别感谢一位博主帮我解决了这个问题,下面的是他的地址 http://blog.csdn.net/hotlinhao/article/details/12980309昨天晚上使用sp实现在Activity到service的通信,但是sp就是不更新,只有重新启动app才更新。我还一直以为是线程的问题。。现在才知道在实例化sp的时候,有所区别SharedPreferences sp=this.get
Android中使用SharedPreferences保存数据
SharedPreferences是Android平台提供的一个轻量级的存储类,存储格式是key-value(键值对),使用xml文件保存数据,文件存放在/data/data/package-name/shared_prefs目录下。 基本使用,可用于软件的基本设置,或者是保存用户的基本信息。 SharedPreferences sharedPreferences = getSharedPrefe
Android开发——补充SharedPreferences存储(跨Activity存取数据)
平安夜晚上我们自学了简单的SharedPreferences存储,今天课上老师又讲了一遍,我们又学了一招,跨Activity存取数据。不过我们把前面的几种存储这样系统学过来就觉得这个也不是很难嘛,可以接受。   我们两个Activity那么就有两个布局文件,一个用来保存和获取数据,一个用来取别人的数据。 activity_main.xml(和前面几篇数据存储的一样) <LinearLayou
当SharedPreferences 不在activity中的时候
SharedPreferences preference = BaseApplication.getInstance().getSharedPreferences(&quot;token&quot;,Context.MODE_PRIVATE);
Android开发中Activity与Service之间getSharedPreferences不同步的解决方法
当Activity中修改了shared的值,而Service中读到的还是原来的值,相当的头大。不过终于还是在网上找到了解决的办法。 向Google致敬,远离Baidu更健康,下面说正事。 我们在写程序的时候经常会这样写: SharedPreferences userInfo = context.getSharedPreferences(SHARE_TAG,0); 或者 S