java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory
相關的代碼 -
public void delete(int position) {
SQLiteDatabase db = getWritableDatabase(); //this is null
db.execSQL("DELETE FROM LOGIN WHERE _ID=1;");
db.close();
}
這是代碼在DBHelper.class中。數據添加和選擇工作但刪除只會導致錯誤。這裏有什麼問題?
所有的DBHelper代碼
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import static android.content.ContentValues.TAG;
public class DBHelper extends SQLiteOpenHelper {
private Context context;
private DBHelper dbHelper;
public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
this.context = context;
}
@Override public void onCreate(SQLiteDatabase db) {
try {
String DROP_SQL = "drop table if exists LOGIN";
db.execSQL(DROP_SQL);
} catch(Exception ex) {
Log.e(TAG, "Exception in DROP_SQL", ex);
}
StringBuffer sb = new StringBuffer();
sb.append(" CREATE TABLE LOGIN (");
sb.append(" _ID INTEGER PRIMARY KEY AUTOINCREMENT, ");
sb.append(" ID TEXT, ");
sb.append(" PW TEXT) ");
try {
db.execSQL(sb.toString());
} catch(Exception ex) {
Log.e(TAG, "Exception in CREATE_SQL", ex);
}
Toast.makeText(context, R.string.make, Toast.LENGTH_SHORT).show();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Toast.makeText(context, R.string.upgrade, Toast.LENGTH_SHORT).show();
}
public void addLogin(Login login) {
SQLiteDatabase db = getWritableDatabase();
StringBuffer sb = new StringBuffer();
sb.append(" INSERT INTO LOGIN (");
sb.append(" ID, PW) ");
sb.append(" VALUES (?, ?) ");
if(login.getId().equals("") || login.getPw().equals("")){
Toast.makeText(context, R.string.nodata, Toast.LENGTH_SHORT).show();
}else{
db.execSQL(sb.toString(),
new Object[]{
login.getId(),
login.getPw(),
});;
Toast.makeText(context, R.string.insert, Toast.LENGTH_SHORT).show();
}
}
public void delete(int position) {
SQLiteDatabase db = getWritableDatabase(); //this is null
db.execSQL("DELETE FROM LOGIN WHERE _ID=1;");
db.close();
//????
//db.execSQL("DELETE FROM LOGIN WHERE _ID=" + position + ";");
//?? ???
}
public List getAllData() {
StringBuffer sb = new StringBuffer();
sb.append(" SELECT _ID, ID, PW FROM LOGIN ");
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery(sb.toString(), null);
List list = new ArrayList();
Login login = null;
while (cursor.moveToNext()) {
login = new Login();
login.set_id(cursor.getInt(0));
login.setId(cursor.getString(1));
login.setPw(cursor.getString(2));
list.add(login);
}
return list;
}
}
已滿錯誤
11月8日至1日:14:34.094 23589-23589/com.yonoo.naverloginhelper d/ViewRootImpl:ViewPostImeInputStage processPointer 0 11月8日至1日:14:34.134 23589-23589/com.yonoo.naverloginhelper D/ViewRootImpl:ViewPostImeInputStage processPointer 1 08-01 11:24:33.866 23589-23589/com.yonoo.naverloginhelper W/IInputConnectionWrapper:getTextBeforeCursor on inactive InputConnection 08-01 11:24:33.916 23589-23589/com.yonoo.naverloginhelper V/ActivityThread:updateVisibility:ActivityRecord {a6dc7d0 token = [email protected] {com.yonoo.naverloginhelper/com.yonoo.naverloginhelper.DBActivity}}顯示:true 08-01 11:24:33.916 23589-23589/com.yonoo.naverloginhelper W/IInputConnectionWrapper:getSelectedText上無活性InputConnection 11月8日至1日:24:33.916 23589-23589/com.yonoo.naverloginhelper W/IInputConnectionWrapper:getTextAfterCursor上無活性InputConnection 11月8日至1日:24:39.086 23589- 23589/com.yonoo.naverloginhelper D/ViewRootImpl:MSG_RESIZED_REPORT:ci = Rect(0,96-0,0)vi = Rect(0,96-0,0)或= 1 08-01 13:36:26.303 23589 -23589/com.yonoo.naverloginhelper D/ViewRootImpl:MSG_RESIZED:ci = Rect(0,96-0,1000)vi = Rect(0,96-0,1000)或= 1 08-01 13:36:26.373 23589-23589/com.yonoo.naverloginhelper I /時間軸:時間軸:Activity_idle id:android.os.BinderP roxy @ 5f1945b time:11500752 08-01 13:36:27.323 23589-23589/com.yonoo.naverloginhelper D/ViewRootImpl:ViewPostImeInputStage processPointer 0 08-01 13:36:27.463 23589-23589/com.yonoo.naverloginhelper D/ViewRootImpl:ViewPostImeInputStage processPointer 1 08-01 13:36:27.963 23589-23589/com.yonoo.naverloginhelper D/ViewRootImpl:ViewPostImeInputStage processPointer 0 08-01 13:36:28.063 23589-23589/com.yonoo.naverloginhelper D/ViewRootImpl:ViewPostImeInputStage processPointer 1 08-01 13:36:28.073 23589-23589/com.yonoo.naverloginhelper d/AndroidRuntime:關閉VM
顯示java.lang.NullPointerException:嘗試調用虛擬方法「android.database .sqlite.SQLiteDatabase android.content.Context.openOrCreateDatab ase(java.lang.String,int,android.database.sqlite.SQLiteDatabase $ CursorFactory,android.database.DatabaseErrorHandler)'在空對象引用 at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:283) at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223) at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163) at com.yonoo.naverloginhelper.DBHelper.delete(DBHelper.java: 71) at com.yonoo.naverloginhelper.DBActivity.DeleteList(DBActivity.java:70) at com.yonoo.naverloginhelper.LoginListAdapter $ 1.onClick(LoginListAdapter.java:76) at androi d.view.View.performClick(View.java:5702) at android.widget.TextView.performClick(TextView。java:10888) at android.view.View $ PerformClick.run(View.java:22541) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler。 java:95) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7229) at java.lang.reflect.Method.invoke(Native Method ) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1230) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
顯示完整的堆棧跟蹤,請 –
添加堆棧跟蹤 –
我會檢查堆棧跟蹤錯誤的其餘部分。由於onCreate例外,數據庫可能沒有被創建 –