내 응용 프로그램은 데이터베이스의 모든 정보를 listview에 표시합니다. 리스트 뷰에서 한 행을 클릭하면 애플리케이션이 데이터베이스에서 해당 행을 삭제하겠다고 알립니다. 하지만 오류는 내가 확인을 클릭하면, 응용 프로그램 통지 오류입니다. 나는 왜 오류가 databse를 열 수 없는지 이해하지 못합니다. 소스 코드sqlite에서 레코드를 삭제할 수 없습니다
public class Index extends Activity {
private ArrayList<String> DateArray = new ArrayList<String>();
private ArrayList<String> CostArray = new ArrayList<String>();
private ArrayList<String> SalesArray = new ArrayList<String>();
private ArrayList<String> ProfitArray = new ArrayList<String>();
private ArrayList<String> IDArray = new ArrayList<String>();
private DB_Adapter mDb = new DB_Adapter(this);
ListView listview;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.index);
listview = (ListView) ((Activity) this)
.findViewById(R.id.listView1);
workoffline();
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
workoffline();
super.onRestart();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
workoffline();
super.onResume();
}
public void clearArray()
{
DateArray.clear();
CostArray.clear();
SalesArray.clear();
ProfitArray.clear();
IDArray.clear();
}
public void workoffline()
{
clearArray();
try {
// mở kết nối đến databse sqlite
mDb.openDB();
// lấy thông tin thông qua IDDelivery
Cursor mCursor = mDb.getAll();
// Duyệt record từ đầu
if (mCursor.moveToFirst()) {
do {
IDArray.add(mCursor.getString(0));
DateArray.add(mCursor.getString(1));
CostArray.add(mCursor.getString(2));
SalesArray.add(mCursor.getString(3));
ProfitArray.add(mCursor.getString(4));
} while (mCursor.moveToNext());
listview.setAdapter(new DataAdapter(this, DateArray
.toArray(new String[DateArray.size()]), CostArray
.toArray(new String[CostArray.size()]), SalesArray
.toArray(new String[SalesArray.size()]), ProfitArray
.toArray(new String[ProfitArray.size()])));
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
final int ID = Integer.valueOf(IDArray.get(position));
try {
Index.this.runOnUiThread(new Runnable() {
public void run() {
AlertDialog.Builder builder = new AlertDialog.Builder(
Index.this);
builder.setTitle("Waring!");
builder.setMessage("Are you delete!")
.setCancelable(false)
.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
public void onClick(
DialogInterface dialog, int id) {
mDb.delete_byID(ID);
}
});
builder.setNegativeButton("Không", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
AlertDialog alert = builder.create();
alert.show();
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
// Đóng database
mDb.closeDB();
} catch (Exception e) {
e.printStackTrace();
}
}
}
로그 고양이 오류
01-15 16:06:50.940: E/AndroidRuntime(17932): FATAL EXCEPTION: main
01-15 16:06:50.940: E/AndroidRuntime(17932): java.lang.IllegalStateException: database not open
01-15 16:06:50.940: E/AndroidRuntime(17932): at android.database.sqlite.SQLiteDatabase.delete(SQLiteDatabase.java:1619)
01-15 16:06:50.940: E/AndroidRuntime(17932): at Data.DB_Adapter.delete_byID(DB_Adapter.java:94)
01-15 16:06:50.940: E/AndroidRuntime(17932): at com.example.xitinshop.Index$1$1$1.onClick(Index.java:102)
01-15 16:06:50.940: E/AndroidRuntime(17932): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:159)
01-15 16:06:50.940: E/AndroidRuntime(17932): at android.os.Handler.dispatchMessage(Handler.java:99)
01-15 16:06:50.940: E/AndroidRuntime(17932): at android.os.Looper.loop(Looper.java:130)
01-15 16:06:50.940: E/AndroidRuntime(17932): at android.app.ActivityThread.main(ActivityThread.java:3683)
01-15 16:06:50.940: E/AndroidRuntime(17932): at java.lang.reflect.Method.invokeNative(Native Method)
01-15 16:06:50.940: E/AndroidRuntime(17932): at java.lang.reflect.Method.invoke(Method.java:507)
01-15 16:06:50.940: E/AndroidRuntime(17932): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
-15 16:06:50.940: E/AndroidRuntime(17932): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-15 16:06:50.940: E/AndroidRuntime(17932): at dalvik.system.NativeStart.main(Native Method)
, 당신은 당신이 DB를 닫습니다 – njzk2
runonuithread이 호출 할 필요는 없습니다, 다음은 항목을 클릭합니다. 그래서 db가 열리지 않습니다. – njzk2
'mDb.delete_byID (ID); 행 뒤의 db를 닫습니다. – Deepzz