2017-11-29 26 views
-5

私はすでにデータベースにある電子メールとパスワードを確認してログインページを作成しようとしています。しかし、致命的な例外が発生します。android:onClickのメソッドを実行できませんでしたか?

ここに私のLoginActivity.java、myDbHelper.java、activity_login.xmlおよびlogcatエラーがあります。次のように

logcatエラーがある:

public Cursor getEmail(TextView email) 
    { 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor cursor= db.rawQuery("select * from contacts where email="+email+"",null); 
     return cursor; 
    } 
    public Cursor getpass(TextView pass) 
    { 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor cursor= db.rawQuery("select * from contacts where password="+pass+"",null); 
     return cursor; 
    } 
を:

FATAL EXCEPTION:main 
    Process:no.nordicsemi.android.nrftoolbox,PID:9052 
    java.lang.IllegalStateException: 
    Could not 
    execute method for android:onClick 
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
    at android.view.View.performClick(View.java:4785) 
    at android.view.View$PerformClick.run(View.java:19888) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5276) 
    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:911) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706) 
    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:288) 
    at android.view.View.performClick(View.java:4785)  
    at android.view.View$PerformClick.run(View.java:19888)  
    at android.os.Handler.handleCallback(Handler.java:739)  
    at android.os.Handler.dispatchMessage(Handler.java:95)  
    at android.os.Looper.loop(Looper.java:135)  
    at android.app.ActivityThread.main(ActivityThread.java:5276)  
    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:911)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706)  
    Caused by:android.database.sqlite.SQLiteException:near ".": 

    syntax error(code 1):,while compiling:select * 
    from contacts 
    where email = android.support.v7.widget.AppCompatEditText 

    { 
     1d 2 b15f4 VFED..CL ........ 0, 72 - 1080, 208 #7f 090085 app: 
    id/editText_mail 
    } 

    at android.database.sqlite.SQLiteConnection.nativePrepareStatement(
    Native Method) 
    at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) 
    at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500) 
    at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 
    at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37) 
    at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44) 
    at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316) 
    at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1255) 
    at no.nordicsemi.android.nrftoolbox.myDbAdapter.getEmail(myDbAdapter.java:208) 
    at no.nordicsemi.android.nrftoolbox.LoginActivity.login(LoginActivity.java:41) 

マイLoginActivity.java次のよう

public class LoginActivity extends AppCompatActivity { 

    TextView email; 
    TextView pass; 

    private no.nordicsemi.android.nrftoolbox.myDbAdapter mydb; 

    @Override 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 
     email = (TextView) findViewById(R.id.editText_mail); 
     pass = (TextView) findViewById(R.id.editText_pass); 
     mydb = new no.nordicsemi.android.nrftoolbox.myDbAdapter(this); 

    } 

    public void register(View v) { 
     Intent goToSecond = new Intent(); 
     goToSecond.setClass(this, Register_Page.class); 
     startActivity(goToSecond); 
    } 

    public void login(View v) { 
     Cursor c1 = mydb.getEmail(email); 
     Cursor c2 = mydb.getpass(pass); 
     if (c1 != null & c2 != null) { 
      Intent goToSecond = new Intent(); 
      goToSecond.setClass(this, Profile.class); 
      startActivity(goToSecond); 
     } else 
      message(getApplicationContext(), "not valid user"); 
    } 
} 

myDbHelper.java(getEmailとGETPASS方法)であります

何が原因でアプリがクラッシュするのですか?
どこにエラーがありますか?

私は今、logcatエラーが提案された変更を示していなかった.But:

Caused by: android.database.sqlite.SQLiteException: near "@gmail": syntax error (code 1): , while compiling: select * from contacts where [email protected]  

がどのように私はこれを修正できますか?

+0

を得ましたlogcat @IntelliJAmiyaのエラー –

+0

私の答えを親切にチェックしてください。あなたの 'SELECT'ステートメントを修正してください。 –

答えて

0
  • 是正SELECT声明。

SQLiteException周辺 "":構文エラー(コード1)、コンパイル中:

使用getText().toString()。あなたのSELECTのステートメントになります。アプリがクラッシュする原因は何

Cursor cursor= db.rawQuery("select * from contacts where email='"+email.getText().toString()+"'",null); 

そして

Cursor cursor= db.rawQuery("select * from contacts where password='"+pass.getText().toString()+"'",null); 
+0

Ok.let me inform –

+0

提案を適用しましたが、質問で編集した別のエラーが発生しました。@ IntelliJ Amiya –

+0

@vinnykingerは、電子メール= '"+ email.getText()から連絡先からselect *を使用します。 toString()+ "'" ' –

1
EditText email = (EditText) findViewById(R.id.editText_mail); 
EditText pass = (EditText) findViewById(R.id.editText_pass); 
Cursor c1 = mydb.getEmail(email.getText()); 
Cursor c2 = mydb.getpFass(pass.getText()); 

AND 
Cursor cursor= db.rawQuery("select * from contacts where email='"+email.getText().toString()+"'",null); 

Cursor cursor= db.rawQuery("select * from contacts where password='"+pass.getText().toString()+"'",null); 
+0

は提案を適用しましたが、質問で編集した別のエラーが発生しました。 @Zezariya Nilesh –

0

?可能な場合にはエラーがありますか?

その問題を引き起こしてemailpassを、SQLクエリは文字列に常にあり、あなたのemailpassStringしかしTextViewではないので、それゆえクラッシュ

変更myDbHelper.java

public Cursor getEmail(TextView email) 
    { 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor cursor= db.rawQuery("select * from contacts where email='"+email.getText().toString()+"'",null); //Added getText().toString() 
     return cursor; 
    } 
    public Cursor getpass(TextView pass) 
    { 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor cursor= db.rawQuery("select * from contacts where password='"+pass.getText()+"'",null); //Added getText().toString() 
     return cursor; 
    } 
+0

提案を適用しましたが、質問で編集した別のエラーが発生しました@ Firoz Memon –

+0

二重引用符の前と後ろに一重引用符を追加する 'email =' " + email.getText()。toString()+ "'" 'また、私の返信メールとパスワードの両方を編集しました –

+1

ありがとうございました! –

関連する問題