2017-02-25 3 views
0

私はアンドロイドアプリケーションで基本的なCRUD関数を実装しています。私は私の登録と私のログインでのREADを通じてCREATEメソッドを作成しています。私は登録時にエラーを受け取っていませんが、私のアプリケーションにログインするとクラッシュし、カーソル上にヌルポインタ例外が生成されます。カーソルがnullを指している

私は、ログインのボタンクリックでメソッドsearchRecordを呼び出す:

public Boolean searchRecord(String username, String password) throws SQLException{ 
    Boolean isUser = false; 
    String selectQuery = "SELECT * FROM "+DB_TABLE+" WHERE "+K_NAME+" = "+username+ " AND "+K_PASSWORD+" = "+password; 
    Cursor c = null; 

    c = dBase.rawQuery(selectQuery, null); 

    if(c.moveToFirst()){ 
      isUser = false; 
    } 
    else { 
     isUser = false; 
    } 
    return isUser; 
} 

私が実際にそのAから取得したレコードの機能に基づいて:ここで

mLogin.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        if(!mUsername.getText().toString().isEmpty() && !mPassword.getText().toString().isEmpty()) { 
         DBase db = new DBase(MainActivity.this); 
         if(db.searchRecord(mUsername.getText().toString(), mPassword.getText().toString())){ 
          Toast.makeText(MainActivity.this, "Welcome, "+mUsername.getText().toString()+"!", Toast.LENGTH_LONG).show(); 
          Intent intent = new Intent(MainActivity.this,TimeSetter.class); 
          startActivity(intent); 
         } 
         else { 
          Intent intent = new Intent(MainActivity.this,SignupActivity.class); 
          startActivity(intent); 
         } 

        } 
       } 
      }); 

は、私のdBASEクラスのsearchRecord方法があります私はSQLiteに精通していないので、私が見つけた別のプロジェクトです:

public String[] getRecord(int rid) throws SQLException{ 
    String selectQuery = "SELECT * FROM "+DB_TABLE+" WHERE "+K_RID+" = "+rid; 
    Cursor c = null; 
    c = dBase.rawQuery(selectQuery, null); 
    String[] data = new String[2]; 
    if(c.moveToFirst()){ 
     int indexName = c.getColumnIndex(K_NAME); 
     int indexCourse = c.getColumnIndex(K_EMAIL); 
     int indexPassword = c.getColumnIndex(K_PASSWORD); 
     data[0] = c.getString(indexName); 
     data[1] = c.getString(indexCourse); 
     data[2] = c.getString(indexPassword); 
    } 
    return data; 
} 

そして最後に、ここに私のデータベースの宣言である:ここで

@Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     db.execSQL(
       "CREATE TABLE " + DB_TABLE + " (" + 
         K_RID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
         K_NAME + " TEXT NOT NULL, " + 
         K_EMAIL + " TEXT NOT NULL, " + 
         K_PASSWORD + " TEXT NOT NULL);" 
     ); 
    } 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     db.execSQL("DROP TABLE IF EXIST " + DB_TABLE); 
     onCreate(db); 
    } 

あるエラーについての私のログ:

それは、この行を指す
02-25 22:33:22.261 21810-21810/com.exceptions.finalproject E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: com.exceptions.finalproject, PID: 21810 
                     java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.Cursor android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[])' on a null object reference 
                      at com.exceptions.finalproject.DBase.searchRecord(DBase.java:84) 
                      at com.exceptions.finalproject.MainActivity$1$1.onClick(MainActivity.java:38) 
                      at android.view.View.performClick(View.java:4848) 
                      at android.view.View$PerformClick.run(View.java:20262) 
                      at android.os.Handler.handleCallback(Handler.java:815) 
                      at android.os.Handler.dispatchMessage(Handler.java:104) 
                      at android.os.Looper.loop(Looper.java:194) 
                      at android.app.ActivityThread.main(ActivityThread.java:5637) 
                      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:960) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 

c = dBase.rawQuery(selectQuery, null);

ありがとう!

答えて

1

あなたは例外を誤解しています。エラーは、ヌル参照でメソッドrawQueryが呼び出されていることを示します。これは、dBase変数がカーソルではなくヌルであることを意味します。

問題の根は、その変数が初期化されているところにあります。

関連する問題