Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NullPointerException:尝试调用虚拟方法';android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase_Android_Sqlite_Nullpointerexception - Fatal编程技术网

NullPointerException:尝试调用虚拟方法';android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase

NullPointerException:尝试调用虚拟方法';android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase,android,sqlite,nullpointerexception,Android,Sqlite,Nullpointerexception,我得到的错误是 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 vo

我得到的错误是

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;

    }

}
完全错误

08-01 11:14:34.094 23589-23589/com.yonoo.naverloginhelper D/ViewRootImpl:viewPostimeiInputStage进程指针0 08-01 11:14:34.134 23589-23589/com.yonoo.naverloginhelper D/ViewRootImpl:viewPostimeiInputStage进程指针1 08-01 11:24:33.866 23589-23589/com.yonoo.naverloginhelper W/IInputConnectionWrapper:GetTextBefore光标位于非活动InputConnection上 08-01 11:24:33.916 23589-23589/com.yonoo.naverloginhelper V/ActivityThread:updatevibility:ActivityRecord{a6dc7d0 token=android.os。BinderProxy@5f1945b{com.yonoo.naverloginhelper/com.yonoo.naverloginhelper.DBActivity}show:true 08-01 11:24:33.916 23589-23589/com.yonoo.naverloginhelper W/IInputConnectionWrapper:getSelectedText on inactive InputConnection 08-01 11:24:33.916 23589-23589/com.yonoo.naverloginhelper W/IInputConnectionWrapper:getTextAfterCursor位于非活动InputConnection上 08-01 11: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/Timeline:Timeline:Activity\u idle id:android.os。BinderProxy@5f1945b时间:11500752 08-01 13:36:27.323 23589-23589/com.yonoo.naverloginhelper D/ViewRootImpl:viewPostimeiInputStage进程指针0 08-01 13:36:27.463 23589-23589/com.yonoo.naverloginhelper D/ViewRootImpl:viewPostimeiInputStage进程指针1 08-01 13:36:27.963 23589-23589/com.yonoo.naverloginhelper D/ViewRootImpl:viewPostimeiInputStage进程指针0 08-01 13:36:28.063 23589-23589/com.yonoo.naverloginhelper D/ViewRootImpl:viewPostimeiInputStage进程指针1 08-01 13:36:28.073 23589-23589/com.yonoo.naverloginhelper D/AndroidRuntime:关闭虚拟机

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String,int,android.database.sqlite.SQLiteDatabase$CursorFactory,android.database.DatabaseErrorHandler)” 位于android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:283) 位于android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223) 位于android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163) 位于com.yonoo.naverloginhelper.DBHelper.delete(DBHelper.java:71) 位于com.yonoo.naverloginhelper.DBActivity.DeleteList(DBActivity.java:70) 登录com.yonoo.naverloginhelper.LoginListAdapter$1.onClick(LoginListAdapter.java:76) 在android.view.view.performClick上(view.java:5702) 在android.widget.TextView.performClick上(TextView.java:10888) 在android.view.view$PerformClick.run(view.java:22541) 位于android.os.Handler.handleCallback(Handler.java:739) 位于android.os.Handler.dispatchMessage(Handler.java:95) 位于android.os.Looper.loop(Looper.java:158) 位于android.app.ActivityThread.main(ActivityThread.java:7229) 位于java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1230)
请访问com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

检查您的应用程序权限。清单和运行时

在哪里设置数据库名称和版本

您可以像这样创建构造函数。您的数据库名称和版本总是相同的

// Database version
private static final int DATABASE_VERSION = 1;
// Database name
private static final String DATABASE_NAME = MyDatabase.db;

public DBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        this.context = context;
}

显示完整的stacktrace,请读取stacktrace我将检查stacktrace的其余部分是否有错误。数据库可能没有被创建,因为onCreate异常事实上,副本是准确的,上下文是空的