0

私のコードで問題を見つけるのを手伝ってください。ユーザーが有効な電子メール アドレスを入力したかどうか、および既に存在するかどうかを確認しようとしています。ユーザーが何らかのフォーマットで無効な電子メールアドレスを入力した場合、私はすでにトラップします。電子メールが存在するかどうかはすでに確認しており、ユーザーが新しい有効な電子メールアドレスを入力すると、アプリケーションがクラッシュしました。これが私のコードです:

else if (!Email.equals(""))
{
    if(Email.equals(storedEmail))   //Check if the email address already exist
       {
           Toast.makeText(getApplicationContext(), "Email address already exist.",Toast.LENGTH_LONG).show();
       }


    else if (!matcherObj.matches()) //it will check if the user enter valid email
      {
        Toast.makeText(getApplicationContext(), "Invalid email address.",Toast.LENGTH_LONG).show();
        txtEmail.setText("");
      }
    else // if the email address is not existing and is valid it will save to the database
      {
        db.Register(newPatientInfo(Fname,Mname,Lname,Suffix,Birthday,Homeno,MobileNo,Email,Brgy,Province,CityMun,Zip,CFname,CLname,DClinic,DClinicAdd));
        Toast.makeText(getApplicationContext(),"Saved!", Toast.LENGTH_LONG).show();
        Clear();
      }

}

ここに私のデータベースハンドラの私のコードがあります

public String Patient_Emailexist(String p_email)                
{               
  SQLiteDatabase db = this.getReadableDatabase();               
  Cursor c = db.query(TABLE_PATIENT, null, PATIENT_EMAIL + "=?", new String[]{String.valueOf(p_email)},null, null, null);                                               
    if (c == null)              
      {                        
        c.moveToFirst();                                    
      }                 
         c.moveToFirst();               
         String patient_email = c.getString(c.getColumnIndex(PATIENT_EMAIL));               
         return patient_email;  
}

データベースに保存されるはずの有効な新しい電子メール アドレスを入力すると、アプリケーションがクラッシュします。前もって感謝します!

エラーが見つかりました

05-17 10:27:17.410: E/AndroidRuntime(678): 致命的な例外: メイン 05-17 10:27:17.410: E/AndroidRuntime(678): android.database.CursorIndexOutOfBoundsException: インデックス 0 が要求されました。 0 05-17 10:27:17.410: E/AndroidRuntime(678): android.database.AbstractCursor.checkPosition(AbstractCursor.java:418) で 05-17 10:27:17.410: E/AndroidRuntime(678): Android で.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136) 05-17 10:27:17.410: E/AndroidRuntime(678): android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50) で 05-17 10:27 :17.410: E/AndroidRuntime(678): com.example.palsproject.DatabaseHandler.Patient_Emailexist(DatabaseHandler.java:353) 05-17 10:27:17.410: E/AndroidRuntime(678): com.example.palsproject. PatientRegistration$1.onClick(PatientRegistration.java:95) 05-17 10:27:17.410: E/AndroidRuntime(678): android.view.View.performClick(View.java:4084) 05-17 10:27:17.410: E/AndroidRuntime(678): android.view.View$PerformClick.run で(View.java:16966) 05-17 10:27:17.410: E/AndroidRuntime(678): android.os.Handler.handleCallback(Handler.java:615) 05-17 10:27:17.410: E/AndroidRuntime (678): android.os.Handler.dispatchMessage(Handler.java:92) 05-17 10:27:17.410: E/AndroidRuntime(678): android.os.Looper.loop(Looper.java:137) で05-17 10:27:17.410: E/AndroidRuntime(678): android.app.ActivityThread.main(ActivityThread.java:4745) 05-17 10:27:17.410: E/AndroidRuntime(678): Java で。 lang.reflect.Method.invokeNative(ネイティブ メソッド) 05-17 10:27:17.410: E/AndroidRuntime(678): java.lang.reflect.Method.invoke(Method.java:511) 05-17 10:27 で:17.410: E/AndroidRuntime(678): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 05-17 10:27:17.410: E/AndroidRuntime(678): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 05-17 10:27:17.410: E/AndroidRuntime(678): dalvik.system.NativeStart.main(ネイティブメソッド)

4

2 に答える 2

0

あなたがしていることは、カーソルがnullであってもnullであるかどうかをチェックしていることです。ifの後のステートメントも実行されるため、getstringの範囲外でnullになります。私はあなたのコードを変更しました

public String Patient_Emailexist(String p_email)                
{        
     String patient_email="";
     SQLiteDatabase db = this.getReadableDatabase();               
     Cursor c = db.query(TABLE_PATIENT, null, PATIENT_EMAIL + "=?", new String[]{String.valueOf(p_email)},null, null, null);                                               
if (c == null)              
  {                        
    return patient_email;                                   
  }
 else                 
 {    c.moveToFirst();               
     String patient_email = c.getString(c.getColumnIndex(PATIENT_EMAIL)); 
 }              
     return patient_email;  
}

私は最初にpatient_emailを "" に初期化したので、それはnullですか "" それ以外の場合は文字列が返されます

于 2013-05-17T09:14:52.267 に答える