尝试从android studio中的数据库打印数据后,我得到一个空引用异常

DJ.*_*hik 1 java mysql android

感谢阅读我的询问.我知道之前已经问过这个问题,但我没有找到我在其他回复中寻找的答案.我希望我会问正确的问题.

此代码适用于我的DataBase Handler.它包含与其相关的所有方法,例如创建表,添加和删除条目以及在我的应用程序中打印数据库.

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class EmailDBHandler extends SQLiteOpenHelper{

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "loginEntries.db";
public static final String TABLE_LOGINENTRIES = "loginEntries";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_NICKNAME = "nickname";
public static final String COLUMN_EMAILADDRESS = "emailAddress";
public static final String COLUMN_PASSWORD = "password";
public static final String COLUMN_LASTNAME = "lastName";
public static final String COLUMN_FIRSTNAME = "firstName";


public EmailDBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
    super(context, DATABASE_NAME, factory, DATABASE_VERSION);
}


@Override
public void onCreate(SQLiteDatabase db) {
    String query = "CREATE TABLE " + TABLE_LOGINENTRIES + "(" +
            COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            COLUMN_NICKNAME + " TEXT, " +
            COLUMN_EMAILADDRESS + " TEXT, " +
            COLUMN_PASSWORD + " TEXT, " +
            COLUMN_LASTNAME + " TEXT, " +
            COLUMN_FIRSTNAME + " TEXT " +
            /*COLUMN_PHONENUMBER + " INTEGER " +*/
            ");";
    db.execSQL(query);
    String queryTwo = "INSERT INTO " + TABLE_LOGINENTRIES +
            " (" + COLUMN_EMAILADDRESS + ", " +
            COLUMN_NICKNAME + ", " +
            COLUMN_PASSWORD + ", " +
            COLUMN_FIRSTNAME + ", " +
            COLUMN_LASTNAME + " " +
           /* COLUMN_PHONENUMBER +*/ ")" + " VALUES " + " (\'email address\', \'nickname\', \'password\', \' First Name\', \'Last Name \');";
    db.execSQL(queryTwo);
}



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


}

public String logInCheck(String loginEmailEntry){
    //used to find email and password in the database to compare to entered entries to confirm user

    String passwordHolder;
    SQLiteDatabase db = getWritableDatabase();
    String query = "SELECT " + COLUMN_PASSWORD + " FROM " + TABLE_LOGINENTRIES + " WHERE " + COLUMN_EMAILADDRESS  + "=\"" + loginEmailEntry + "\"";
    Cursor c = db.rawQuery(query, null);
    passwordHolder = c.getString(c.getColumnIndex(COLUMN_PASSWORD));
    db.close();
    c.close();
    return passwordHolder;


}

public boolean signUpEmailCheck(String emailEntry){
//checks if a new email entry already exists in the database
    Integer holder;
    SQLiteDatabase db = getWritableDatabase();
    String query = "SELECT * FROM " + TABLE_LOGINENTRIES + " WHERE " + COLUMN_EMAILADDRESS  + "=\"" + emailEntry + "\"";
    Cursor c = db.rawQuery(query,null);
    holder = c.getColumnCount();
    if (holder > 0) {
        db.close();
        c.close();
        return true;
    } else {
        db.close();
        c.close();
        return false;
    }
}

//add new row to Database

public void addEntry(LoginEntries entry){
    ContentValues values = new ContentValues();
    values.put(COLUMN_EMAILADDRESS,entry.get_emailAddress());
    values.put(COLUMN_PASSWORD,entry.get_password());
    values.put(COLUMN_FIRSTNAME,entry.get_firstName());
    values.put(COLUMN_LASTNAME,entry.get_lastName());
    values.put(COLUMN_NICKNAME,entry.get_nickname());
    SQLiteDatabase db = getWritableDatabase();
    db.insert(TABLE_LOGINENTRIES, null, values);
    db.close();
}


//delete items from database

public void deleteEmailEntry(String emailEntry){
    SQLiteDatabase db = getWritableDatabase();
    db.execSQL("DELETE FROM " + TABLE_LOGINENTRIES + " WHERE " + COLUMN_EMAILADDRESS + "=\"" +
            emailEntry + "\";");
}
public void deleteNickname(String nicknameEntry){
    SQLiteDatabase db = getWritableDatabase();
    db.execSQL("DELETE FROM " + TABLE_LOGINENTRIES + " WHERE " + COLUMN_NICKNAME + "=\"" +
            nicknameEntry + "\";");
}
public void deletePasswordEntry(String passwordEntry){
    SQLiteDatabase db = getWritableDatabase();
    db.execSQL("DELETE FROM " + TABLE_LOGINENTRIES + " WHERE " + COLUMN_PASSWORD + "=\"" +
            passwordEntry + "\";");
}
public void deleteLastNameEntry(String lastNameEntry){
    SQLiteDatabase db = getWritableDatabase();
    db.execSQL("DELETE FROM " + TABLE_LOGINENTRIES + " WHERE " + COLUMN_LASTNAME + "=\"" +
            lastNameEntry + "\";");
}
public void deleteFirstNameEntry(String FirstNameEntry){
    SQLiteDatabase db = getWritableDatabase();
    db.execSQL("DELETE FROM " + TABLE_LOGINENTRIES + " WHERE " + COLUMN_FIRSTNAME + "=\"" +
            FirstNameEntry + "\";");
}
//Print database as a string
public String emailDatabaseToString(){
    String dbString = "";
    SQLiteDatabase db = getWritableDatabase();
    String query = "SELECT * FROM " + TABLE_LOGINENTRIES + " WHERE 1";

    //cursor point to a location in your results
    Cursor c = db.rawQuery(query, null);
    c.moveToFirst();
    while(!c.isAfterLast()){
        if(c.getString(c.getColumnIndex(COLUMN_EMAILADDRESS)) !=null){
            dbString += c.getString(c.getColumnIndex(COLUMN_EMAILADDRESS));
            dbString += "\n";
        }c.moveToNext();
    }
    db.close();
    c.close();
    return dbString;
}
public String passwordDatabaseToString(){
    String dbString = "";
    SQLiteDatabase db = getWritableDatabase();
    String query = "SELECT * FROM " + TABLE_LOGINENTRIES + " WHERE 1";

    //cursor point to a location in your results
    Cursor c = db.rawQuery(query, null);
    c.moveToFirst();
    while(!c.isAfterLast()){
        if(c.getString(c.getColumnIndex(COLUMN_PASSWORD)) != null){
            dbString += c.getString(c.getColumnIndex(COLUMN_PASSWORD));
            dbString += "\n";
        }
        c.moveToNext();
    }
    db.close();
    c.close();
    return dbString;
}
public String firstNameDatabaseToString(){
    String dbString = "";
    SQLiteDatabase db = getWritableDatabase();
    String query = "SELECT * FROM " + TABLE_LOGINENTRIES + " WHERE 1";

    //cursor point to a location in your results
    Cursor c = db.rawQuery(query, null);
    c.moveToFirst();
    while(!c.isAfterLast()){
        if(c.getString(c.getColumnIndex(COLUMN_FIRSTNAME)) != null){
            dbString += c.getString(c.getColumnIndex(COLUMN_FIRSTNAME));
            dbString += "\n";
        }
        c.moveToNext();
    }
    db.close();
    c.close();
    return dbString;
}
public String lastNameDatabaseToString(){
    String dbString = "";
    SQLiteDatabase db = getWritableDatabase();
    String query = "SELECT * FROM " + TABLE_LOGINENTRIES + " WHERE 1";

    //cursor point to a location in your results
    Cursor c = db.rawQuery(query, null);
    c.moveToFirst();
    while(!c.isAfterLast()){
        if(c.getString(c.getColumnIndex(COLUMN_LASTNAME)) != null){
            dbString += c.getString(c.getColumnIndex(COLUMN_LASTNAME));
            dbString += "\n";
        }
        c.moveToNext();
    }
    db.close();
    c.close();
    return dbString;
}

public String nicknameDatabaseToString(){
    String dbString = "";
    SQLiteDatabase db = getWritableDatabase();
    String query = "SELECT * FROM " + TABLE_LOGINENTRIES + " WHERE 1";

    //cursor point to a location in your results
    Cursor c = db.rawQuery(query, null);
    c.moveToFirst();
    while(!c.isAfterLast()){
        if(c.getString(c.getColumnIndex(COLUMN_NICKNAME)) != null){
            dbString += c.getString(c.getColumnIndex(COLUMN_NICKNAME));
            dbString += "\n";
        }
        c.moveToNext();
    }
    db.close();
    c.close();
    return dbString;
}
}
Run Code Online (Sandbox Code Playgroud)

这个类是我的注册类,我将新数据输入到我的数据库中.大多数if语句都指示用户输入的数据是否错误.

import android.content.Intent;
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class SignUpMainClass extends AppCompatActivity{

EditText newEmailAddressInput;
EditText newPasswordInput;
EditText confirmNewPasswordInput;
TextView newFirstNameInput;
TextView newLastNameInput;
TextView newNickname;
TextView displayNickname;
TextView displayEmail;
TextView displayPassword;
TextView displayFirstName;
TextView displayLastName;
// EditText newPhoneNumberInput;
EmailDBHandler dbHandler;
//SignUpWelcomeScreen inputEntry;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.signup_main);

    newEmailAddressInput = (EditText) findViewById(R.id.newEmailAddressInput);
    newPasswordInput = (EditText) findViewById(R.id.newPasswordInput);
    confirmNewPasswordInput = (EditText) findViewById(R.id.confirmNewPasswordInput);
    newFirstNameInput = (TextView) findViewById(R.id.newFirstNameInput);
    newLastNameInput = (TextView) findViewById(R.id.newLastNameInput);
    newNickname = (TextView) findViewById(R.id.newNickname);
    dbHandler = new EmailDBHandler(this, null, null, 1);

    Bundle nameData = getIntent().getExtras();
    if(nameData == null){
        return;
    }


    String  newFirstNameMessage =nameData.getString("newFirstNameMessage");
    String  newLastNameMessage =nameData.getString("newLastNameMessage");
    String  newNicknameMessage =nameData.getString("newNicknameMessage");


    newFirstNameInput.setText(newFirstNameMessage);
    newLastNameInput.setText(newLastNameMessage);
    newNickname.setText(newNicknameMessage);
}

public void registerAccount(View view) {
    LoginEntries emailEntry = new LoginEntries(newEmailAddressInput.getText().toString(), "", "", "", "");
    String isTempEmail = newEmailAddressInput.getText().toString();
    LoginEntries passwordEntry = new LoginEntries("", newPasswordInput.getText().toString(), "", "","");
    String isTempPass = newPasswordInput.getText().toString();
    String confirmPasswordHolder = confirmNewPasswordInput.getText().toString();
    LoginEntries newFirstNameEntry = new LoginEntries("", "", newFirstNameInput.getText().toString(), "", "");
    LoginEntries newLastNameEntry = new LoginEntries("", "", "", newLastNameInput.getText().toString(),"");
    LoginEntries newNicknameEntry = new LoginEntries("", "", "", "", newNickname.getText().toString());



    if (TextUtils.isEmpty(isTempEmail) && TextUtils.isEmpty(isTempPass)) {
        Toast.makeText(this, "Enter Email and Password", Toast.LENGTH_LONG).show();
        newEmailAddressInput.setText("");
        newPasswordInput.setText("");
        confirmNewPasswordInput.setText("");
    } else if (TextUtils.isEmpty(isTempEmail) && !TextUtils.isEmpty(isTempPass)) {
        Toast.makeText(this, "Enter Email", Toast.LENGTH_LONG).show();
        newEmailAddressInput.setText("");
        newPasswordInput.setText("");
        confirmNewPasswordInput.setText("");
    } else if (!TextUtils.isEmpty(isTempEmail) && TextUtils.isEmpty(isTempPass)) {
        Toast.makeText(this, "Enter Password", Toast.LENGTH_LONG).show();
        newEmailAddressInput.setText("");
        newPasswordInput.setText("");
        confirmNewPasswordInput.setText("");
    } /*Temporary while app is offline, when app will be operational, different prompt will search web to verify email address*/
    else if (!isTempEmail.endsWith("@gmail.com") && !isTempEmail.endsWith("@yahoo.com") && !isTempEmail.endsWith("@aol.com") && !isTempEmail.endsWith("@hotmail.com")) {
        Toast.makeText(this, "Not a valid email address, trying again", Toast.LENGTH_LONG).show();
        newEmailAddressInput.setText("");
        newPasswordInput.setText("");
        confirmNewPasswordInput.setText("");
    } else if (!dbHandler.signUpEmailCheck(isTempEmail)) {
        Toast.makeText(this, "Email used, please try again", Toast.LENGTH_LONG).show();
        newEmailAddressInput.setText("");
        newPasswordInput.setText("");
        confirmNewPasswordInput.setText("");
    } else if (!confirmPasswordHolder.equals(isTempPass)) {
        Toast.makeText(this, "Passwords don't match!", Toast.LENGTH_LONG).show();
        newPasswordInput.setText("");
        confirmNewPasswordInput.setText("");
    } else{


        Intent i = new Intent(this, SecondarySignUpClass.class);

        String firstName = newFirstNameInput.getText().toString();
        String lastName = newLastNameInput.getText().toString();
        String nickname = newNickname.getText().toString();

        i.putExtra("newFirstNameMessage",firstName);
        i.putExtra("newLastNameMessage",lastName);
        i.putExtra("newNicknameMessage", nickname);

        startActivity(i);


        Toast.makeText(this, "Saved!", Toast.LENGTH_LONG).show();
        dbHandler.addEntry(emailEntry);// adds email to database
        dbHandler.addEntry(passwordEntry);//adds password to database
        dbHandler.addEntry(newFirstNameEntry);//adds First Name to database
        dbHandler.addEntry(newLastNameEntry);//adds Last name to database
        dbHandler.addEntry(newNicknameEntry);//adds Nickname to Database
        printDatabase();



    }
}


public void printDatabase(){
    String dbEmailString = dbHandler.emailDatabaseToString();
    String dbPasswordString = dbHandler.passwordDatabaseToString();
    String dbFirstNameString = dbHandler.firstNameDatabaseToString();
    String dbLastNameString = dbHandler.lastNameDatabaseToString();
    String dbNicknameString= dbHandler.nicknameDatabaseToString();
    displayEmail.setText(dbEmailString);
    displayPassword.setText(dbPasswordString);
    displayFirstName.setText(dbFirstNameString);
    displayLastName.setText(dbLastNameString);
    displayNickname.setText(dbNicknameString);


    }
}
Run Code Online (Sandbox Code Playgroud)

我的输入过程很简单.它旨在登录通用应用程序,很可能是社交应用程序.用户按下一个注册按钮,它会将他带到上面附加类的xml.用户输入数据(名字,姓氏,电子邮件,密码,昵称)并按下与注册帐户方法关联的"注册"按钮.然后应该将信息输入数据库,我可以从中提取它.但事实并非如此.这是我尝试从数据库中提取数据时在logcat中收到的错误消息.我认为我错过了一些很重要的东西,但是我不确定它是什么.

Process: com.example.vitaliy_2.emailpassworddatabasetrial, PID: 15139
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(App    CompatViewInflater.java:275)
at android.view.View.performClick(View.java:5191)
at android.view.View$PerformClick.run(View.java:20916)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5972)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)                                                                                                      at java.lang.reflect.Method.invoke(Method.java:372)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:270)
at android.view.View.performClick(View.java:5191) 
at android.view.View$PerformClick.run(View.java:20916) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:145) 
at android.app.ActivityThread.main(ActivityThread.java:5972) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at com.example.vitaliy_2.emailpassworddatabasetrial.SignUpMainClass.printDatabase(SignUpMainClass.java:165)
at com.example.vitaliy_2.emailpassworddatabasetrial.SignUpMainClass.registerAccount(SignUpMainClass.java:135)
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:270) 
at android.view.View.performClick(View.java:5191) 
at android.view.View$PerformClick.run(View.java:20916) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:145) 
at android.app.ActivityThread.main(ActivityThread.java:5972) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)at com.android.internal.os.Zygote

Init.main(ZygoteInit.java:1194) 
Run Code Online (Sandbox Code Playgroud)

谢谢你走到这一步.

Int*_*iya 7

引发者:java.lang.NullPointerException:尝试在空对象引用上调用虚方法'void android.widget.TextView.setText(java.lang.CharSequence)'

TextView object is null .

首先,您需要 在setContentView(R.layout.signup_main)之后设置所有TextView ;id

displayNickname = (TextView) findViewById(R.id.Your_Id);
displayEmail = (TextView) findViewById(R.id.You_id);
.......// Call Rest of Textview //.............
Run Code Online (Sandbox Code Playgroud)