Java 基于用户输入在Android中编辑SharedReference
我对Java/Android开发非常陌生,我尝试让用户检查“男孩”或“女孩”的单选按钮,并将其写入Java 基于用户输入在Android中编辑SharedReference,java,android,sharedpreferences,Java,Android,Sharedpreferences,我对Java/Android开发非常陌生,我尝试让用户检查“男孩”或“女孩”的单选按钮,并将其写入SharedReferences,以便我可以在其他活动中使用它。每当我尝试打开此活动时,我的应用程序就会崩溃 public class NewBabyProfile extends Activity { String GENDER = "Baby1Gender"; // SharedPreferences initializations SharedPreferences babyOneGen
SharedReferences
,以便我可以在其他活动中使用它。每当我尝试打开此活动时,我的应用程序就会崩溃
public class NewBabyProfile extends Activity {
String GENDER = "Baby1Gender";
// SharedPreferences initializations
SharedPreferences babyOneGender = getSharedPreferences(getString(R.string.baby_one_profile), Context.MODE_PRIVATE);
SharedPreferences.Editor editor = babyOneGender.edit();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_baby_profile);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.new_baby_profile, menu);
return true;
}
public void onRadioButtonClicked(View genderSelection){
boolean checked = ((RadioButton) genderSelection).isChecked();
switch(genderSelection.getId()) {
case R.id.gender_boy:
if (checked)
editor.putString("gender","boy").commit();
break;
case R.id.gender_girl:
if (checked)
editor.putString("gender","girl").commit();
break;
}
}
}
试试这个
SharedPreferences babyOneGender = getApplication().getSharedPreferences(getString(R.string.baby_one_profile), Context.MODE_PRIVATE);
不能在一个类中直接初始化以下两个
SharedPreferences babyOneGender = getSharedPreferences(getString(R.string.baby_one_profile), Context.MODE_PRIVATE);
SharedPreferences.Editor editor = babyOneGender.edit();
SharedReferences初始化应该在onCreate()或onResume()之类的方法中进行
将其移动到onCreate(Bundle)中,您的应用程序将不会再次崩溃。还要检查日志,自己找出问题:)
最终代码:-
public class NewBabyProfile extends Activity {
String GENDER = "Baby1Gender";
//Global declaration.
SharedPreferences babyOneGender;
SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_baby_profile);
//Initializations inside onCreate() so no error.
babyOneGender = getSharedPreferences(getString(R.string.baby_one_profile), Context.MODE_PRIVATE);
editor = babyOneGender.edit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.new_baby_profile, menu);
return true;
}
public void onRadioButtonClicked(View genderSelection){
boolean checked = ((RadioButton) genderSelection).isChecked();
switch(genderSelection.getId()) {
case R.id.gender_boy:
if (checked)
editor.putString("gender","boy").commit();
break;
case R.id.gender_girl:
if (checked)
editor.putString("gender","girl").commit();
break;
}
}
}
将BabyNegender和editor的初始化移动到onCreate:
SharedPreferences babyOneGender;
SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_baby_profile);
babyOneGender = getSharedPreferences(getString(R.string.baby_one_profile), Context.MODE_PRIVATE);
editor = babyOneGender.edit();
你能在
OnCreate
方法中移出babyOneGender
和editor
的初始化,看看会发生什么吗?当我这样做时,下面的开关中的“editor无法解决”错误。请从日志中提供崩溃的错误10-09 21:43:19.407:E/AndroidRuntime(3263):致命异常:main 10-09 21:43:19.407:E/AndroidRuntime(3263):java.lang.RuntimeException:无法实例化活动组件信息{com.example.parentingEmemenders/com.example.parentingEmenders.NewBabyProfile}:java.lang.NullPointerException'用NewB发布整个活动abyProfile。这会全局初始化它们吗?当我在onRadioButtonClicked()中尝试使用它们时,似乎通常将它们放在onCreate中时,它们没有定义。抱歉,如果我使用了一些不正确的术语,谢谢你的帮助!已更新全局初始化:)全局声明变量,但在onCreate()中初始化它们。这不会再引起问题:)谢谢!我不知道为什么出于某种原因,它没有点击,但现在它是有意义的:)这似乎已经奏效了!有没有办法确认它编辑了SharedReferences文件?我没有根手机,因此无法在/data中查看XML文件。您可以在Android emulator上进行测试,在Android emulator中,您有根权限查看任何文件。