我试图在我的第二个活动上使用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);
}
答案 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();
}