Android在哪里声明SharedPreferences

时间:2014-01-25 01:15:24

标签: android sharedpreferences

我试图在我的第二个活动上使用edittexts来改变我的第一个/主要活动的字符串。所以要做到这一点,必须使用SharedPreferences。

在我的第二个活动的顶部,我已经宣布了他们和编辑。它会导致nullpointexception错误并导致代码崩溃。我不知道在哪里进行初始化,因为我希望在main / first活动中查看sharedPreferences。

SharedPreferences settings = getSharedPreferences("prefs", 0);
SharedPreferences.Editor editor = settings.edit();

此外,这是放在sharedprefs字典中的正确代码吗?

if(!introstring.isEmpty()) //if the fields are NOT empty, they should get saved.
{
  editor.putString("intro", introstring);
}

2 个答案:

答案 0 :(得分:2)

  

在我的第二项活动的顶部

你的意思是作为字段 - 是的,这会因Why getApplicationContext() in constructor of Activity throws null pointer exception?

中解释的原因而导致NPE

正如您需要的评论中所建议的那样

class YourSecondActivity extends Activity {

    SharedPreferences sp;
    Editor e;

    protected void onCreate() {
        sp = PreferenceManager.getDefaultSharedPreferences(this); // forget about
        // named preferences - get the default ones and finish with it
        e = sp.edit();
    }

    meth() {
        //...
        if(!introstring.isEmpty()) { // save the fields if NOT empty
            e.putString("intro", introstring);
            e.commit(); // you forgot to commit
        }
    }
}

答案 1 :(得分:1)

我处理SharedPrefrences的方法是创建一个类,它将扩展Application类并将SharedPrefrence放在那里,以便可以在应用程序的任何位置访问它。

class MyApp extends Application{
      SharedPreferences sharedPreferences;

      public void onCreate() {
           sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
      }

      public static getSharedPrefrences(){
           return sharedPrefrences;
      }
}

您必须在活动代码

中声明应用程序的名称标签
<application
    android:allowBackup="true"
    android:name=".fundamentals.UploadApp"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    ....
    ....
</application>

然后,您可以从任何您想要的活动中访问它。

class SomeActivity extends Activity{
      onCreate(){
          SharedPrefences prefs = MyApp.getSharedPrefrences();
      }
}

此外,您需要在SharedPrefrences

中添加内容后提交更改
if(!introstring.isEmpty()) //if the fields are NOT empty, they should get saved.
{
  editor.putString("intro", introstring).commit();
}