У вас довольно много проблем, и я бы посоветовал попытаться использовать следующий код, который отделяет слушателей, а не заключает их в себе (checkChanged будет применяться только в том случае, если нажата кнопка отправки, что слишком поздно, так как это произойдет вв каком бы состоянии оно ни находилось (до тех пор, пока вы не поменяете флажок)).
Ожидается, "но как узнать, что добавлена строка?" метод logData был добавлен в DatabaseHelper , который будет перечислять строки в журнале (например, введение в получение данных из базы данных).
MainActivity: -
открытый класс MainActivity расширяет AppCompatActivity {
CheckBox ch1;
Button btnSubmit;
int checked=0;
DatabaseHelper dbhelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbhelper = new DatabaseHelper(this); //<<<< ADDED
ch1=(CheckBox)findViewById(R.id.checkBox);
btnSubmit=(Button)findViewById(R.id.button);
// Button onClick Listener
btnSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dbhelper.addData(checked);
dbhelper.logData(); //<<<< ADDED to display data to log (see logData in DatabaseHelper)
}
});
// CheckBox onchanged Listener
ch1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
checked = 0;
if (isChecked) {
checked = 1;
}
}
});
//AddData(); //REMOVED
}
DatabaseHelper.java: -
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "check.db";
public static final String TABLE_NAME = "entry";
public static final String COL1 = "SIZE";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
//String createTable = "CREATE TABLE " + TABLE_NAME + "(SIZE INTEGER)";
String createTable = "CREATE TABLE " + TABLE_NAME + "(" + COL1 + " INTEGER)"; //<<<< Suggestion
db.execSQL(createTable);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
//db.execSQL("DROP IF TABLE EXISTS " + TABLE_NAME); //<<<< INVALID
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); //<<<< ADDED CORRECTION
onCreate(db);
}
public boolean addData(int s1){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL1, s1);
//<<<< simplified return
return (db.insert(TABLE_NAME, null, contentValues) > 0);
}
//<<<<<<<<<< New method to write contents to the log >>>>>>>>>>
public void logData() {
SQLiteDatabase db = this.getWritableDatabase();
Cursor csr = db.query(TABLE_NAME,null,null,null, null,null, null);
Log.d(
"ENTRY TABLE INFO",
"Number of rows in table is " +
csr.getCount() +
"; they are :-"
);
while (csr.moveToNext()) {
Log.d(
"ENTRY TABLE INFO",
"Row # " +
String.valueOf(csr.getPosition()) +
" that has a value of " +
csr.getInt(csr.getColumnIndex(COL1))
);
}
csr.close();
}
}
Результаты тестирования
После выполнения следующих действий: -
- Нажатие кнопки отправки (флажок не установлен).
- Проверка флажка.
- Нажатие кнопки отправки (флажок установлен).
Результирующий вывод вжурнал: -
05-28 21:47:40.628 1156-1156/ci.checkit D/ENTRY TABLE INFO: Number of rows in table is 2; they are :-
Row # 0 that has a value of 0
Row # 1 that has a value of 1