gpt4 book ai didi

android - 保存复选框值

转载 作者:行者123 更新时间:2023-11-29 18:16:16 25 4
gpt4 key购买 nike

您好,我想以 .xml 形式保存一些复选框的值。我在我的主 xml 上为此使用了 SharedPreferences,但是当我收到消息时无法编译:

Cannot invoke isChecked() on the primitive type int

有人可以帮帮我吗?代码应该是什么样子?

编辑后的代码:

@Override 
public void onPause() {
super.onPause();
final CheckBox checkBox = (CheckBox) findViewById(R.id.nieuwbel);
save(checkBox.isChecked());
}

private CheckBox checkBox = null;

@Override
public void onResume() {
super.onResume();
checkBox = (CheckBox) findViewById(R.id.nieuwbel);
checkBox.setChecked(load()); <----- still exception line 464
}
private void save(final boolean isChecked) {
SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("check", isChecked);
editor.commit();
}

private boolean load() {
SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
return sharedPreferences.getBoolean("check", false);
}

异常代码 Logcat:

10-29 23:35:31.556: E/AndroidRuntime(3292): FATAL EXCEPTION: main
10-29 23:35:31.556: E/AndroidRuntime(3292): java.lang.RuntimeException: Unable to resume activity {com.sencide/com.sencide.AndroidLogin}: java.lang.NullPointerException
10-29 23:35:31.556: E/AndroidRuntime(3292): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2241)
10-29 23:35:31.556: E/AndroidRuntime(3292): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2256)
10-29 23:35:31.556: E/AndroidRuntime(3292): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1789)
10-29 23:35:31.556: E/AndroidRuntime(3292): at android.app.ActivityThread.access$1500(ActivityThread.java:123)
10-29 23:35:31.556: E/AndroidRuntime(3292): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
10-29 23:35:31.556: E/AndroidRuntime(3292): at android.os.Handler.dispatchMessage(Handler.java:99)
10-29 23:35:31.556: E/AndroidRuntime(3292): at android.os.Looper.loop(Looper.java:130)
10-29 23:35:31.556: E/AndroidRuntime(3292): at android.app.ActivityThread.main(ActivityThread.java:3835)
10-29 23:35:31.556: E/AndroidRuntime(3292): at java.lang.reflect.Method.invokeNative(Native Method)
10-29 23:35:31.556: E/AndroidRuntime(3292): at java.lang.reflect.Method.invoke(Method.java:507)
10-29 23:35:31.556: E/AndroidRuntime(3292): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
10-29 23:35:31.556: E/AndroidRuntime(3292): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
10-29 23:35:31.556: E/AndroidRuntime(3292): at dalvik.system.NativeStart.main(Native Method)
10-29 23:35:31.556: E/AndroidRuntime(3292): Caused by: java.lang.NullPointerException
10-29 23:35:31.556: E/AndroidRuntime(3292): at com.sencide.AndroidLogin.onResume(AndroidLogin.java:463)
10-29 23:35:31.556: E/AndroidRuntime(3292): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150)
10-29 23:35:31.556: E/AndroidRuntime(3292): at android.app.Activity.performResume(Activity.java:3832)
10-29 23:35:31.556: E/AndroidRuntime(3292): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2231)
10-29 23:35:31.556: E/AndroidRuntime(3292): ... 12 more

编辑 2:几乎与另一个用户一起解决了这个问题,但是当我启动应用程序并在不执行任何操作(显示菜单等)的情况下关闭它时,我会在 onPause 的这一行上得到 nullexception:

putBoolean(PREF_BOOL, nieuwbel.isChecked()); 

到目前为止的代码:

public static final String PREFS_NAME = "SharedPrefsDemoPreferences";  
public static final String PREF_BOOL = "PrefBool";

private SharedPreferences mPrefs;
private CheckBox nieuwbel;

public boolean myBoxState = false;
..
mPrefs = getSharedPreferences(PREFS_NAME, 0);
nieuwbel = (CheckBox)findViewById(R.id.nieuwbel);

通过菜单调用布局xml:

@Override 
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.menu_beltegoed: // Laat Beltegoed.xml zien en checkboxen worden geinitialiseerd
MyBeltegoed dialog = new MyBeltegoed (this, new OnReadyListenerBeltegoed());
dialog.setTitle("Optie beltegoed/toon:");
dialog.show();
nieuwbel = (CheckBox)dialog.findViewById(R.id.nieuwbel);
nieuwbel.setChecked(myBoxState);
nieuwbel.setOnCheckedChangeListener(new OnCheckedChangeListener(){

@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
myBoxState = nieuwbel.isChecked();

}});
return true;
case R.id.menu_sluit:
//showHelp();
return true;
default:
return super.onOptionsItemSelected(item);
}
}

onResume 和 onSave:

@Override 
protected void onResume() {
mPrefs = getSharedPreferences(PREFS_NAME, 0);
if(mPrefs!=null)
myBoxState=mPrefs.getBoolean(PREF_BOOL, false);
super.onResume();
}


@Override
protected void onPause() {
Editor e = mPrefs.edit();
e.putBoolean(PREF_BOOL, nieuwbel.isChecked()); //<-- NullPointer when i start and close the app, without doing some handlings.
e.commit();
Toast.makeText(this, "Settings Saved.", Toast.LENGTH_SHORT).show();
super.onPause();
}

编辑 3:

@Override     
protected void onPause() {
MyBeltegoed dialog = new MyBeltegoed (this, new OnReadyListenerBeltegoed());
nieuwbel = (CheckBox)dialog.findViewById(R.id.nieuwbel);
Editor e = mPrefs.edit();
e.putBoolean(PREF_BOOL, nieuwbel.isChecked()); <-- nullpointer
e.commit();
Toast.makeText(this, "Settings Saved.", Toast.LENGTH_SHORT).show();
super.onPause();
}

最佳答案

您不能使用 R.id.nieuwbel.isChecked() 访问复选框的值。方法如下:

final CheckBox checkBox = (CheckBox) findViewById(R.id.nieuwbel);
if (checkBox.isChecked()) {
checkBox.setChecked(false);
}

参见 this链接。

所以 onPause 看起来像这样:

@Override 
public void onPause() {
super.onPause();
final CheckBox checkBox = (CheckBox) findViewById(R.id.nieuwbel);
save(checkBox.isChecked());
}

onResume 看起来像这样:

@Override 
public void onResume() {
super.onResume();
final CheckBox checkBox = (CheckBox) findViewById(R.id.nieuwbel);
checkBox.setChecked(load());
}

关于android - 保存复选框值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7941770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com