내 문제는 앱 충돌입니다. 불행히도 앱이 중지되었습니다.SQLite로 데이터 저장 및 ListView에 추가하기
MainActivity.java
public class MainActivity extends AppCompatActivity {
DatabaseHelper myDB;
Button btnAdd;
Button btnList;
TextView tvView;
EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnAdd = (Button) findViewById(R.id.btnAdd);
btnList = (Button) findViewById(R.id.btnList);
tvView = (TextView) findViewById(R.id.Textview);
editText = (EditText) findViewById(R.id.editText);
myDB=new DatabaseHelper(this);
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String newEntry = editText.getText().toString();
if (newEntry.length() != 0) {
AddData(newEntry);
editText.setText("");
} else {
Toast.makeText(MainActivity.this, "You must put something in the text field", Toast.LENGTH_LONG).show();
}
}
});
btnList.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, ListDataActivity.class);
startActivity(intent);
}
});
}
public void AddData(String newEntry) {
boolean insertData = myDB.addData(newEntry);
// check inserted successfully
if (insertData == true) {
Toast.makeText(MainActivity.this, "Successfully Entered Data!", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(MainActivity.this, "Something went wrong", Toast.LENGTH_LONG).show();
}
}
}
ListAcitivity.java
공용 클래스 ListDataActivity는 {
DatabaseHelper myDB;
ListView listView;
ArrayAdapter<String>listAdapter;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.list_layout);
listView=(ListView)findViewById(R.id.listView);
myDB= new DatabaseHelper(this);
//populate an ArrayList<String> from the databases and then view it
ArrayList<String> theList=new ArrayList<>();
Cursor data=myDB.getListContent();
if(data.getCount()==0){
Toast.makeText(ListDataActivity.this,"The database was empty",Toast.LENGTH_LONG).show();
}else{
while(data.moveToNext()){
theList.add(data.getString(1));
listAdapter=new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,theList);
listView.setAdapter(listAdapter);
}
}
}
DatabaseHelper.java
AppCompatActivity를 확장 29 : 26.268 24636-24636/sg.edu.rp.c346.todolist E/AndroidRuntime공용 클래스 DatabaseHelper는 SQLiteOpenHelper {
public static final String DATABASE_NAME = "mylist.db";
public static final String TABLE_NAME = "mylist_data";
public static final String COL1 = "ID";
public static final String COL2 = "ITEM1";
public DatabaseHelper(Context context){
super (context, DATABASE_NAME, null , 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
String createTable="CREATE TABLE"+ TABLE_NAME +"(ID INTEGER PRIMARY KEY AUTOINCREMENT,"+
"ITEM1 TEXT)";
db.execSQL(createTable);
db.close();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP IF TABLE EXITS "+ TABLE_NAME);
onCreate(db);
db.close();
}
public boolean addData(String item1) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL2, item1);
long result = db.insert(TABLE_NAME, null, contentValues);
//if date as instered incorrectly it will return -1
if (result == -1) {
return false;
} else {
return true;
}
}
/**
* Return all the data from database
* @return
*/
public Cursor getListContent() {
SQLiteDatabase db = this.getWritableDatabase();
Cursor data =db.rawQuery("SELECT * FROM " + TABLE_NAME,null);
return data;
}
}
로그 캣 쇼
12 ~ 27 07 확장 : 치명적인 예외 : 주 프로세스 : sg.edu.rp.c346.todolist, PID : 24636 java.lang.IllegalStateException : 이미 닫힌 개체를 다시 열려고 시도 함 : SQLiteDatabase : /data/data/sg.edu. rp.c346.todolist/databases/mylist.db 에서 android.database.sqlite.SQLiteClosable.acquireReference (SQLiteClosable.java:55) android.database.sqlite.SQLiteDatabase.endTransaction (SQLiteDatabase.java:520) android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked (SQLiteOpenHelper.java : 263) android.database.sqlite.SQLiteOpenHelper.getWritableDatabase (SQLiteOpenHelper.java:164) at sg.edu.rp.c346.todolist.DatabaseHelper.addData (DatabaseHelper.java:45) at sg.edu.rp .c346.todolist.MainActivity.AddData (MainActivity.java:58) at sg.edu.rp.c346.todolist.MainActivity $ 1.onClick (MainActivity.java:39) android.view.View.performClick (View. java : 4438) at android.view.View $ PerformClick.run (View.java:18422) (android.os.Handler.handleCallback (Handler.java:733) android.os.Handler.dispatchMessage (Handler.java:95) java.lang.reflect.Method.invokeNative에서 android.app.ActivityThread.main (ActivityThread.java:5017) 에서 android.os.Looper.loop (Looper.java:136) (기본 방법) 에서 자바에서 .lang.reflect.Method.invoke (Method.java:515) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:779) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:595) dalvik.system.NativeStart.main (기본 메소드) 12-27 07 : 29 : 28.078 24636-24636 /? I/Process : 신호를 보내는 중. PID : 24636 SIG : 9
감사합니다. 그것은 지금 일한다! – Junhao