Sqlite 在android中调用insertData()时出现NullPointerException

Sqlite 在android中调用insertData()时出现NullPointerException,sqlite,android-sqlite,sql-insert,android-databinding,android-database,Sqlite,Android Sqlite,Sql Insert,Android Databinding,Android Database,我目前正在从事安卓速记项目, 但在注册时发生了错误 "java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.example.devd.stangnograpyonimage.DBHelper.insertData(java.lang.String, java.lang.String, java.lang.String, java.lang.String)' on a null object re

我目前正在从事安卓速记项目, 但在注册时发生了错误

"java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.example.devd.stangnograpyonimage.DBHelper.insertData(java.lang.String, java.lang.String, java.lang.String, java.lang.String)' on a null object reference"
DataBaseHelper.java

public static final String DATABASE_NAME = "STAGNODB";
public static final String TABLE_NAME = "Satgno_Table";
//public static final String COLUUMN_ID  = "ID";
public static final String COLUUMN_USERNAME  = "UserName";
public static final String COLUUMN_PASSWORD = "Password";
public static final String COLUUMN_NAME = "Name";
public static final String COLUUMN_EMAIL = "Email";


public DBHelper(Context context) {

    super(context, DATABASE_NAME, null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
    try {
        db.execSQL("CREATE TABLE " + TABLE_NAME + "(" + COLUUMN_USERNAME + " VARCHAR(50),"
                + COLUUMN_PASSWORD + " VARCHAR(50),"
                + COLUUMN_NAME + " VARCHAR(50),"
                + COLUUMN_EMAIL + " VARCHAR(50));", null);
    }catch (Exception e){
        Log.e("SQL Table Creation ", "Table Not Created");
    }
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
}

public  boolean insertData(String userName, String password, String name, String email){
    SQLiteDatabase mydb = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(COLUUMN_USERNAME, userName);
    cv.put(COLUUMN_PASSWORD, password);
    cv.put(COLUUMN_NAME, name);
    cv.put(COLUUMN_EMAIL, email);
    long result = mydb.insert(TABLE_NAME, null, cv);

    if(result == -1){
        return  false;
    }
    else {
        return  true;
    }
}
public class MainActivity extends AppCompatActivity {
    DBHelper myDB;
    EditText etUserName, etPassword, etName, etEmail;
    Button btnRegister, btnLogin;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        etUserName = (EditText) findViewById(R.id.etUserName);
        etPassword = (EditText) findViewById(R.id.etPassword);
        etName = (EditText) findViewById(R.id.etName);
        etEmail = (EditText) findViewById(R.id.etEmail);
        btnRegister = (Button) findViewById(R.id.btnRegister);
        btnLogin = (Button) findViewById(R.id.btnLogin);
        register();
    }
    public void register() {
        btnRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean isInserted = myDB.insertData(etUserName.getText().toString(), etPassword.getText().toString(), etName.getText().toString(), etEmail.getText().toString());
                if(isInserted==true){
                    Toast.makeText(MainActivity.this,"Data Inserted", Toast.LENGTH_LONG).show();
                }
                else {
                    Toast.makeText(MainActivity.this,"Data not Inserted", Toast.LENGTH_LONG).show();
                }
            }
        });
    }
}
MainActivity.java

public static final String DATABASE_NAME = "STAGNODB";
public static final String TABLE_NAME = "Satgno_Table";
//public static final String COLUUMN_ID  = "ID";
public static final String COLUUMN_USERNAME  = "UserName";
public static final String COLUUMN_PASSWORD = "Password";
public static final String COLUUMN_NAME = "Name";
public static final String COLUUMN_EMAIL = "Email";


public DBHelper(Context context) {

    super(context, DATABASE_NAME, null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
    try {
        db.execSQL("CREATE TABLE " + TABLE_NAME + "(" + COLUUMN_USERNAME + " VARCHAR(50),"
                + COLUUMN_PASSWORD + " VARCHAR(50),"
                + COLUUMN_NAME + " VARCHAR(50),"
                + COLUUMN_EMAIL + " VARCHAR(50));", null);
    }catch (Exception e){
        Log.e("SQL Table Creation ", "Table Not Created");
    }
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
}

public  boolean insertData(String userName, String password, String name, String email){
    SQLiteDatabase mydb = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(COLUUMN_USERNAME, userName);
    cv.put(COLUUMN_PASSWORD, password);
    cv.put(COLUUMN_NAME, name);
    cv.put(COLUUMN_EMAIL, email);
    long result = mydb.insert(TABLE_NAME, null, cv);

    if(result == -1){
        return  false;
    }
    else {
        return  true;
    }
}
public class MainActivity extends AppCompatActivity {
    DBHelper myDB;
    EditText etUserName, etPassword, etName, etEmail;
    Button btnRegister, btnLogin;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        etUserName = (EditText) findViewById(R.id.etUserName);
        etPassword = (EditText) findViewById(R.id.etPassword);
        etName = (EditText) findViewById(R.id.etName);
        etEmail = (EditText) findViewById(R.id.etEmail);
        btnRegister = (Button) findViewById(R.id.btnRegister);
        btnLogin = (Button) findViewById(R.id.btnLogin);
        register();
    }
    public void register() {
        btnRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean isInserted = myDB.insertData(etUserName.getText().toString(), etPassword.getText().toString(), etName.getText().toString(), etEmail.getText().toString());
                if(isInserted==true){
                    Toast.makeText(MainActivity.this,"Data Inserted", Toast.LENGTH_LONG).show();
                }
                else {
                    Toast.makeText(MainActivity.this,"Data not Inserted", Toast.LENGTH_LONG).show();
                }
            }
        });
    }
}

在activity类中,尚未初始化变量
DBHelper myDB
。因此,当您的活动调用

myDB.insertData(etUserName.getText().toString(), ...
您得到一个NullPointerException,因为
myDB
为null。要解决此问题,请在活动的onCreate方法中创建对象

myDB = new DBHelper(this);

您正在声明但未实例化myDB,因此它为空

i、 e

只声明myDB,因此此时它为空,因为没有为变量赋值

您需要添加以下内容:-

    myDB = new DBHelper(this);
main活动的
onCreate
方法中

e、 g:-

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    etUserName = (EditText) findViewById(R.id.etUserName);
    etPassword = (EditText) findViewById(R.id.etPassword);
    etName = (EditText) findViewById(R.id.etName);
    etEmail = (EditText) findViewById(R.id.etEmail);
    btnRegister = (Button) findViewById(R.id.btnRegister);
    btnLogin = (Button) findViewById(R.id.btnLogin);
    myDB = new DBHelper(this); //<<<< ADDED
    register();
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etUserName=(EditText)findViewById(R.id.etUserName);
etPassword=(EditText)findViewById(R.id.etPassword);
etName=(EditText)findViewById(R.id.etName);
etEmail=(EditText)findViewById(R.id.etEmail);
btnRegister=(按钮)findViewById(R.id.btnRegister);
btnLogin=(按钮)findViewById(R.id.btnLogin);

myDB=new DBHelper(this);//我已经初始化了。在MainActivity的第7行中的类创建下面检查它。我查看了MainActivity,但在第7行中没有看到初始化。这一行的内容是什么?