[英]How to save a checkbox state in database?
我正在嘗試在數據庫中保存一個復選框狀態,以后再檢索它,但它似乎不起作用。 現在我的日志中出現錯誤,希望有人能夠提供幫助。
這是我的復選框代碼:
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/check1"
android:text="test"
android:layout_below="@+id/textViewAge"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="15dp" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/check2"
android:text="test2"
android:layout_below="@+id/check1"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="11dp" />
然后在我的CreateOrEditJobCards.java中:
checkA = (CheckBox) findViewById(R.id.check1);
checkA.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton arg0, boolean checked) {
// TODO Auto-generated method stub
if(checked)
{
SaveString="Yes";
}
else
{
SaveString="No";
}
}
});
checkB = (CheckBox) findViewById(R.id.check2);
checkB.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton arg0, boolean checked) {
// TODO Auto-generated method stub
if(checked)
{
SaveStringA="Yes";
}
else
{
SaveStringA="No";
}
}
});
......
if(personID > 0) {
saveButton.setVisibility(View.GONE);
buttonLayout.setVisibility(View.VISIBLE);
Cursor rs = dbHelper.getPerson(personID);
rs.moveToFirst();
String personName = rs.getString(rs.getColumnIndex(DBHelper.PERSON_COLUMN_NAME));
String personGender = rs.getString(rs.getColumnIndex(DBHelper.PERSON_COLUMN_GENDER));
SaveString = rs.getString(rs.getColumnIndex(DBHelper.PERSON_CHECKBOX_A));
SaveStringA = rs.getString(rs.getColumnIndex(DBHelper.PERSON_CHECKBOX_B));
int personAge = rs.getInt(rs.getColumnIndex(DBHelper.PERSON_COLUMN_AGE));
if (!rs.isClosed()) {
rs.close();
}
nameEditText.setText(personName);
nameEditText.setFocusable(false);
nameEditText.setClickable(false);
genderEditText.setText(personGender);
genderEditText.setFocusable(false);
genderEditText.setClickable(false);
ageEditText.setText((personAge + ""));
ageEditText.setFocusable(false);
ageEditText.setClickable(false);
checkA.setChecked(Boolean.parseBoolean(String.valueOf(SaveString)));
checkA.setFocusable(false);
checkA.setClickable(false);
checkB.setChecked(Boolean.parseBoolean(String.valueOf(SaveStringA)));
checkB.setFocusable(false);
checkB.setClickable(false);
}
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.saveButton:
persistPerson();
return;
case R.id.editButton:
saveButton.setVisibility(View.VISIBLE);
buttonLayout.setVisibility(View.GONE);
nameEditText.setEnabled(true);
nameEditText.setFocusableInTouchMode(true);
nameEditText.setClickable(true);
genderEditText.setEnabled(true);
genderEditText.setFocusableInTouchMode(true);
genderEditText.setClickable(true);
ageEditText.setEnabled(true);
ageEditText.setFocusableInTouchMode(true);
ageEditText.setClickable(true);
checkA.setEnabled(true);
checkA.setFocusableInTouchMode(true);
checkA.setClickable(true);
checkB.setEnabled(true);
checkB.setFocusableInTouchMode(true);
checkB.setClickable(true);
return;
case R.id.deleteButton:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(R.string.deletePerson)
.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dbHelper.deletePerson(personID);
Toast.makeText(getApplicationContext(), "Deleted Successfully", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getApplicationContext(), JobCardMainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
})
.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
AlertDialog d = builder.create();
d.setTitle("Delete Job Card?");
d.show();
return;
}
}
public void persistPerson() {
if(personID > 0) {
if(dbHelper.updatePerson(personID,
nameEditText.getText().toString(),
genderEditText.getText().toString(),
checkA.getText().toString(),
checkB.getText().toString(),
Integer.parseInt(ageEditText.getText().toString()))) {
Toast.makeText(getApplicationContext(), "Job Card Update Successful", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getApplicationContext(), JobCardMainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
else {
Toast.makeText(getApplicationContext(), "Job Card Update Failed", Toast.LENGTH_SHORT).show();
}
}
else {
if(dbHelper.insertPerson(nameEditText.getText().toString(),
genderEditText.getText().toString(),
checkA.getText().toString(),
checkB.getText().toString(),
Integer.parseInt(ageEditText.getText().toString()))) {
Toast.makeText(getApplicationContext(), "Job Card Inserted", Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(getApplicationContext(), "Could not Insert Job Card", Toast.LENGTH_SHORT).show();
}
Intent intent = new Intent(getApplicationContext(), JobCardMainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
}
}
在我的DBHelper.java中
public static final String PERSON_TABLE_NAME = "person";
public static final String PERSON_COLUMN_ID = "_id";
public static final String PERSON_COLUMN_NAME = "name";
public static final String PERSON_COLUMN_GENDER = "gender";
public static final String PERSON_COLUMN_AGE = "age";
public static final String PERSON_CHECKBOX_A = "checka";
public static final String PERSON_CHECKBOX_B = "checkb";
public DBHelper(Context context) {
super(context, DATABASE_NAME , null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(
"CREATE TABLE " + PERSON_TABLE_NAME +
"(" + PERSON_COLUMN_ID + " INTEGER PRIMARY KEY, " +
PERSON_COLUMN_NAME + " TEXT, " +
PERSON_COLUMN_GENDER + " TEXT, " +
PERSON_CHECKBOX_A + " TEXT, " +
PERSON_CHECKBOX_B + " TEXT, " +
PERSON_COLUMN_AGE + " INTEGER)"
);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + PERSON_TABLE_NAME);
onCreate(db);
}
public boolean insertPerson(String name,
String gender,
String checka,
String checkb,
int age) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(PERSON_COLUMN_NAME, name);
contentValues.put(PERSON_COLUMN_GENDER, gender);
contentValues.put(PERSON_COLUMN_AGE, age);
contentValues.put(PERSON_CHECKBOX_A, checka);
contentValues.put(PERSON_CHECKBOX_B, checkb);
db.insert(PERSON_TABLE_NAME, null, contentValues);
return true;
}
public int numberOfRows() {
SQLiteDatabase db = this.getReadableDatabase();
int numRows = (int) DatabaseUtils.queryNumEntries(db, PERSON_TABLE_NAME);
return numRows;
}
public boolean updatePerson(Integer id,
String name,
String gender,
String checka,
String checkb,
int age) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(PERSON_COLUMN_NAME, name);
contentValues.put(PERSON_COLUMN_GENDER, gender);
contentValues.put(PERSON_COLUMN_AGE, age);
contentValues.put(PERSON_CHECKBOX_A, checka);
contentValues.put(PERSON_CHECKBOX_B, checkb);
db.update(PERSON_TABLE_NAME, contentValues, PERSON_COLUMN_ID + " = ? ", new String[] { Integer.toString(id) } );
return true;
}
public Integer deletePerson(Integer id) {
SQLiteDatabase db = this.getWritableDatabase();
return db.delete(PERSON_TABLE_NAME,
PERSON_COLUMN_ID + " = ? ",
new String[] { Integer.toString(id) });
}
public Cursor getPerson(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("SELECT * FROM " + PERSON_TABLE_NAME + " WHERE " +
PERSON_COLUMN_ID + "=?", new String[]{Integer.toString(id)});
return res;
}
public Cursor getAllPersons() {
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery( "SELECT * FROM " + PERSON_TABLE_NAME, null );
return res;
}
}
基本上,在此應用中,用戶將選擇“添加新工作卡”,然后填寫表格並點擊保存。 然后,它將以數字順序顯示在列表視圖中。 然后,當用戶選擇之前創建的表單時,他們可以單擊send,然后它將通過電子郵件發送表單(我仍在處理該表單,並且代碼不在上面)
但是,就像我前面說的,表單中的所有其他內容都可以工作並保存,但似乎無法獲取復選框來保存已檢查狀態
有人可以看看畝代碼,指出我哪里出了問題並提供幫助嗎?
謝謝
編輯
日志輸出:
10-29 10:37:13.329 11748-11825/com.software.example D/mali_winsys: EGLint new_window_surface(egl_winsys_display*, void*, EGLSurface, EGLConfig, egl_winsys_surface**, egl_color_buffer_format*, EGLBoolean) returns 0x3000, [1440x2560]-format:1
10-29 10:37:13.331 11748-11748/com.software.example D/ScrollView: onsize change changed
10-29 10:37:13.367 11748-11748/com.software.example D/ViewRootImpl@db7b317[CreateOrEditJobCards]: MSG_RESIZED_REPORT: ci=Rect(0, 96 - 0, 0) vi=Rect(0, 96 - 0, 0) or=1
10-29 10:37:13.367 11748-11748/com.software.example D/ViewRootImpl@db7b317[CreateOrEditJobCards]: MSG_WINDOW_FOCUS_CHANGED 1
10-29 10:37:13.370 11748-11748/com.software.example V/InputMethodManager: Starting input: tba=android.view.inputmethod.EditorInfo@3e5e501 nm : com.software.example ic=com.android.internal.widget.EditableInputConnection@46effa6
10-29 10:37:13.370 11748-11748/com.software.example I/InputMethodManager: [IMM] startInputInner - mService.startInputOrWindowGainedFocus
10-29 10:37:13.380 11748-11748/com.software.example D/InputTransport: Input channel constructed: fd=96
10-29 10:37:13.380 11748-11748/com.software.example D/InputTransport: Input channel destroyed: fd=91
10-29 10:37:13.406 11748-11825/com.software.example D/OpenGLRenderer: endAllActiveAnimators on 0x7cfa738000 (RippleDrawable) with handle 0x7cfea52600
10-29 10:37:13.536 11748-11748/com.software.example D/ViewRootImpl@db7b317[CreateOrEditJobCards]: MSG_RESIZED: ci=Rect(0, 96 - 0, 1128) vi=Rect(0, 96 - 0, 1128) or=1
10-29 10:37:13.557 11748-11748/com.software.example D/ScrollView: onsize change changed
10-29 10:37:14.180 11748-11748/com.software.example D/ViewRootImpl@db7b317[CreateOrEditJobCards]: ViewPostImeInputStage processPointer 0
10-29 10:37:14.261 11748-11748/com.software.example D/ViewRootImpl@db7b317[CreateOrEditJobCards]: ViewPostImeInputStage processPointer 1
10-29 10:37:15.057 11748-11748/com.software.example D/ViewRootImpl@db7b317[CreateOrEditJobCards]: ViewPostImeInputStage processPointer 0
10-29 10:37:15.156 11748-11748/com.software.exampleD/ViewRootImpl@db7b317[CreateOrEditJobCards]: ViewPostImeInputStage processPointer 1
10-29 10:37:15.807 11748-11748/com.software.example D/ViewRootImpl@db7b317[CreateOrEditJobCards]: ViewPostImeInputStage processPointer 0
10-29 10:37:15.975 11748-11748/com.software.example D/ViewRootImpl@db7b317[CreateOrEditJobCards]: ViewPostImeInputStage processPointer 1
10-29 10:37:16.544 11748-11748/com.software.example D/ViewRootImpl@db7b317[CreateOrEditJobCards]: ViewPostImeInputStage processPointer 0
10-29 10:37:16.619 11748-11748/com.software.example D/ViewRootImpl@db7b317[CreateOrEditJobCards]: ViewPostImeInputStage processPointer 1
10-29 10:37:16.697 11748-11748/com.software.example D/InputTransport: Input channel constructed: fd=87
10-29 10:37:16.698 11748-11748/com.software.example D/ViewRootImpl@89b4657[Toast]: setView = android.widget.LinearLayout{7d5a544 V.E...... ......I. 0,0-0,0} touchMode=true
10-29 10:37:16.710 11748-11748/com.software.example D/ViewRootImpl@db7b317[CreateOrEditJobCards]: MSG_WINDOW_FOCUS_CHANGED 0
10-29 10:37:16.712 11748-11748/com.software.example D/ViewRootImpl@a20a45c[JobCardMainActivity]: dispatchDetachedFromWindow
10-29 10:37:16.716 11748-11748/com.software.example D/InputTransport: Input channel destroyed: fd=88
10-29 10:37:16.735 11748-11825/com.software.example D/mali_winsys: EGLint new_window_surface(egl_winsys_display*, void*, EGLSurface, EGLConfig, egl_winsys_surface**, egl_color_buffer_format*, EGLBoolean) returns 0x3000, [652x176]-format:1
10-29 10:37:16.752 11748-11748/com.software.example D/AbsListView: Get MotionRecognitionManager
10-29 10:37:16.753 11748-11748/com.software.example D/MotionRecognitionManager: mSContextService = com.samsung.android.hardware.context.ISemContextService$Stub$Proxy@17a4e86
10-29 10:37:16.753 11748-11748/com.software.example D/MotionRecognitionManager: motionService = com.samsung.android.gesture.IMotionRecognitionService$Stub$Proxy@6a47347
10-29 10:37:16.753 11748-11748/com.software.example D/MotionRecognitionManager: motionService = com.samsung.android.gesture.IMotionRecognitionService$Stub$Proxy@6a47347
10-29 10:37:16.776 11748-11748/com.software.example D/InputTransport: Input channel constructed: fd=95
10-29 10:37:16.776 11748-11748/com.software.example D/ViewRootImpl@3e9255b[JobCardMainActivity]: setView = DecorView@308d1f8[JobCardMainActivity] touchMode=true
10-29 10:37:16.836 11748-11825/com.software.example D/mali_winsys: EGLint new_window_surface(egl_winsys_display*, void*, EGLSurface, EGLConfig, egl_winsys_surface**, egl_color_buffer_format*, EGLBoolean) returns 0x3000, [1440x2560]-format:1
10-29 10:37:16.837 11748-11748/com.software.example D/AbsListView: onsize change
10-29 10:37:16.838 11748-11748/com.software.example D/ViewRootImpl@89b4657[Toast]: MSG_RESIZED_REPORT: ci=Rect(0, 0 - 0, 0) vi=Rect(0, 0 - 0, 0) or=1
10-29 10:37:16.878 11748-11748/com.software.example D/ViewRootImpl@3e9255b[JobCardMainActivity]: MSG_RESIZED_REPORT: ci=Rect(0, 96 - 0, 0) vi=Rect(0, 96 - 0, 0) or=1
10-29 10:37:16.878 11748-11748/com.software.example D/ViewRootImpl@3e9255b[JobCardMainActivity]: MSG_WINDOW_FOCUS_CHANGED 1
10-29 10:37:16.879 11748-11748/com.software.example V/InputMethodManager: Starting input: tba=android.view.inputmethod.EditorInfo@5f515a4 nm : com.software.example ic=null
10-29 10:37:16.879 11748-11748/com.software.example I/InputMethodManager: [IMM] startInputInner - mService.startInputOrWindowGainedFocus
10-29 10:37:16.883 11748-11748/com.software.example D/InputTransport: Input channel constructed: fd=104
10-29 10:37:16.883 11748-11748/com.software.example D/InputTransport: Input channel destroyed: fd=96
10-29 10:37:16.902 11748-11825/com.software.example D/OpenGLRenderer: endAllActiveAnimators on 0x7cce563400 (RippleDrawable) with handle 0x7d0c2ed3a0
10-29 10:37:16.908 11748-11748/com.software.example W/IInputConnectionWrapper: finishComposingText on inactive InputConnection
10-29 10:37:16.909 11748-11748/com.software.example W/IInputConnectionWrapper: finishComposingText on inactive InputConnection
10-29 10:37:17.308 11748-11748/com.software.example D/ViewRootImpl@db7b317[CreateOrEditJobCards]: dispatchDetachedFromWindow
10-29 10:37:17.312 11748-11748/com.software.example D/InputTransport: Input channel destroyed: fd=85
10-29 10:37:17.665 11748-11748/com.software.example D/ViewRootImpl@3e9255b[JobCardMainActivity]: ViewPostImeInputStage processPointer 0
10-29 10:37:17.670 11748-11748/com.software.example D/ViewRootImpl@89b4657[Toast]: dispatchDetachedFromWindow
10-29 10:37:17.675 11748-11748/com.software.example D/InputTransport: Input channel destroyed: fd=87
10-29 10:37:17.742 11748-11748/com.software.example D/ViewRootImpl@3e9255b[JobCardMainActivity]: ViewPostImeInputStage processPointer 1
10-29 10:37:17.847 11748-11748/com.software.example D/ViewRootImpl@3e9255b[JobCardMainActivity]: MSG_WINDOW_FOCUS_CHANGED 0
10-29 10:37:17.909 11748-11748/com.software.example D/InputTransport: Input channel constructed: fd=87
10-29 10:37:17.909 11748-11748/com.software.example D/ViewRootImpl@ceedbd2[CreateOrEditJobCards]: setView = DecorView@f19c4a3[CreateOrEditJobCards] touchMode=true
10-29 10:37:17.939 11748-11825/com.software.example D/mali_winsys: EGLint new_window_surface(egl_winsys_display*, void*, EGLSurface, EGLConfig, egl_winsys_surface**, egl_color_buffer_format*, EGLBoolean) returns 0x3000, [1440x2560]-format:1
10-29 10:37:17.941 11748-11748/com.software.example D/ScrollView: onsize change changed
10-29 10:37:17.967 11748-11748/com.software.example D/ViewRootImpl@ceedbd2[CreateOrEditJobCards]: MSG_RESIZED_REPORT: ci=Rect(0, 96 - 0, 0) vi=Rect(0, 96 - 0, 0) or=1
10-29 10:37:17.967 11748-11748/com.software.example D/ViewRootImpl@ceedbd2[CreateOrEditJobCards]: MSG_WINDOW_FOCUS_CHANGED 1
10-29 10:37:17.968 11748-11748/com.software.example V/InputMethodManager: Starting input: tba=android.view.inputmethod.EditorInfo@7f1dc85 nm : com.software.example ic=null
10-29 10:37:17.968 11748-11748/com.software.example I/InputMethodManager: [IMM] startInputInner - mService.startInputOrWindowGainedFocus
10-29 10:37:17.973 11748-11748/com.software.example D/InputTransport: Input channel constructed: fd=93
10-29 10:37:17.973 11748-11748/com.software.example D/InputTransport: Input channel destroyed: fd=104
10-29 10:37:18.000 11748-11825/com.software.example D/OpenGLRenderer: endAllActiveAnimators on 0x7cea5c2c00 (ListView) with handle 0x7d0c26c780
不要在插入/更新方法中傳遞checkA.getText()。toString(),您永遠不要更改它們。 只需在dbHelper.insertPerson方法中傳遞SaveString(在onCheckedChangedListener中更改的)即可:
dbHelper.insertPerson(nameEditText.getText().toString(),
genderEditText.getText().toString(),
SaveString,
SaveStringA,
Integer.parseInt(ageEditText.getText().toString())))
考慮稍微改變一下邏輯以便能夠刪除很多代碼。
dbHelper.insertPerson(nameEditText.getText().toString(),
genderEditText.getText().toString(),
checkA.isChecked() ? "Yes" : "No",
checkB.isChecked() ? "Yes" : "No",
Integer.parseInt(ageEditText.getText().toString())))
然后,您可以擺脫onCheckedChangedListener方法以及SaveString和SaveStringA引用。
我看到的另一個錯誤
你有checkA.setChecked(Boolean.parseBoolean(String.valueOf(SaveString)));
..我認為parseBoolean對於“ Yes”,“ No” ...不需要“ True”,“ False”正確工作,因此除非更改此選項,否則永遠不會檢索正確的檢查狀態。 因此,可以將insertPerson方法更改為此:
checkA.isChecked() ? "True" : "False"
checkB.isChecked() ? "True" : "False"
或者,將您的setChecked更改為此:
checkA.setChecked(SaveString.equals("Yes"));
當您持久化Person對象時,您將保存checkbox.getText()返回的內容,而不是保存復選框狀態的SaveString對象。
我使用字符串作為是和否來表示復選框狀態,然后將其保存在數據庫中。 我也正在檢測按下后退按鈕,並在應用程序即將關閉時保存復選框的狀態,只是為了避免數據庫中連續出現垃圾郵件。 我正在附上我的完整代碼。 希望這能解決您的問題。 另外,我為所有內容都使用了不同的Java文件,以避免混淆。
TaskContract.java
public class TaskContract {
public static final String DB_NAME = "com.pkr.checkbox";
public static final int DB_VERSION = 1;
public class TaskEntry implements BaseColumns {
public static final String TABLE = "checkbox";
public static final String HI_CHECK = "hi_checkbox";
public static final String HELLO_CHECK = "hello_checkbox";
}
}
TaskDBHelper.java
public class TaskDBHelper extends SQLiteOpenHelper {
public TaskDBHelper(Context context){
super(context, TaskContract.DB_NAME, null, TaskContract.DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String createTable = "CREATE TABLE " + TaskContract.TaskEntry.TABLE + " ( " +
TaskContract.TaskEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
TaskContract.TaskEntry.HI_CHECK + " TEXT NOT NULL, " +
TaskContract.TaskEntry.HELLO_CHECK + " TEXT NOT NULL);";
String defaultEntry = "INSERT INTO " + TaskContract.TaskEntry.TABLE + " (" + TaskContract.TaskEntry.HI_CHECK + "," + TaskContract.TaskEntry.HELLO_CHECK + ") VALUES\n" +
"('No','No');";
db.execSQL(createTable);
db.execSQL(defaultEntry);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TaskContract.TaskEntry.TABLE);
onCreate(db);
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity {
private CheckBox hi_checkbox_but;
private CheckBox hello_checkbox_but;
private TaskDBHelper mHelper = new TaskDBHelper(this);
String hi, hello;
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
hi_checkbox_but = (CheckBox) findViewById(R.id.checkBox);
hello_checkbox_but = (CheckBox) findViewById(R.id.checkBox1);
SQLiteDatabase db = mHelper.getReadableDatabase();
Cursor cur = db.query(TaskContract.TaskEntry.TABLE,
new String[]{TaskContract.TaskEntry._ID, TaskContract.TaskEntry.HI_CHECK, TaskContract.TaskEntry.HELLO_CHECK},
null, null, null, null, null);
while (cur.moveToNext()){
int hi_index = cur.getColumnIndex(TaskContract.TaskEntry.HI_CHECK);
int hello_index = cur.getColumnIndex(TaskContract.TaskEntry.HELLO_CHECK);
hi = cur.getString(hi_index);
hello = cur.getString(hello_index);
}
if (hi.equals("Yes"))
hi_checkbox_but.setChecked(true);
else
hi_checkbox_but.setChecked(false);
if (hello.equals("Yes"))
hello_checkbox_but.setChecked(true);
else
hello_checkbox_but.setChecked(false);
}
private Boolean exit = false;
@Override
public void onBackPressed() {
String hi_toPass, hello_toPass;
if (exit) {
if (hi_checkbox_but.isChecked())
hi_toPass = "Yes";
else
hi_toPass = "No";
if (hello_checkbox_but.isChecked())
hello_toPass = "Yes";
else
hello_toPass = "No";
SQLiteDatabase db = mHelper.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(TaskContract.TaskEntry.HI_CHECK,hi_toPass);
cv.put(TaskContract.TaskEntry.HELLO_CHECK, hello_toPass);
db.insertWithOnConflict(TaskContract.TaskEntry.TABLE,
null,
cv,
SQLiteDatabase.CONFLICT_REPLACE);
db.close();
finish();
}
else{
Toast.makeText(this, "Press back again to exit.", Toast.LENGTH_SHORT).show();
exit = true;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
exit = false;
}
}, 3 * 1000);
}
}
}
activity_main.xml中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="16dp"
android:orientation="vertical"
tools:context="com.pkr.checkbox.MainActivity">
<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:text="HI" />
<CheckBox
android:id="@+id/checkBox1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:text="Hello" />
</LinearLayout>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.