2016-07-29 5 views
-2

ここにログインoption.helpのための私のアンドロイドコードはどこに問題があるか分かりました。androidログインを作成するには

マイDatabaseHelperクラス:

public String getAllData(String name) { 
    // TODO Auto-generated method stub 
    SQLiteDatabase db=this.getReadableDatabase(); 

//名前を取得し、

Cursor res = db.rawQuery("select User_Name,User_Pass from "+Table_Name, null); 
    String a,b; 
    b="not found"; 
    if(res.moveToFirst()){ 
     do{ 
      a=res.getString(1); 

//check name 

      if(a.equals(name)){ 
       b=res.getString(3); 
       break; 
      } 
     }while(res.moveToNext()); 
    } 

//return corresponding password 
    return b;  
} 

マイアクティビティクラスを渡すためのクエリ:

public void showData(){ 
      submitButton.setOnClickListener(new OnClickListener() { 

     public void onClick(View arg0) { 
      name=userNameEditText.getText().toString(); 
      password=passwordEditText.getText().toString(); 
      String pass=myDb.getAllData(name); 

//matching password 

      if(password.equals(pass)){ 
        Intent intent=new Intent(UserActivity.this,Meal_Information_Activity.class); 
        startActivity(intent); 

       } 
       else{ 
        Toast.makeText(getBaseContext(),"Password doesn't match", Toast.LENGTH_LONG).show(); 
       }    
     } 
    }); 
} 

答えて

1

私はあなたに、ユーザーのユーザー名を渡していると信じてDBメソッド。メソッドの内部では、カーソルが返すuser_passwordに対してユーザー名をチェックしています。あなたのカーソルオブジェクトは、インデックスが0になるまでは配列のように機能します。a=res.getString(1);と言うと、各行に対してクエリによって選択された2番目の項目が得られます。これは、場合によってはuser_passwordです。

クエリを少し変更して、必要な情報のみをすべてのレコードではなくデータベースから取得することをお勧めします。たとえば、ユーザーは両方ともonClick()でこれらの値を取得しているユーザー名とパスワードでログインするため、両方の要素を使用して適切なクエリを構成します。両方の値があるので、DatabaseHelper.getAllData()を変更した場合(ユーザー資格証明を検証する新しいメソッドを作成した場合)、両方のパラメータ(ユーザー名とパスワード)を受け入れるようにクエリを構造化できます。WHERE User_name = 'username'

このようにすると、すべての行ではなく、データベースから1行だけを返します。最初に、カーソルオブジェクトに何かがあるかどうかを確認することができます(そうでない場合は、ユーザー名が無効であること、少なくともデータベースには存在しないことを意味します)。

希望すると便利です。

関連する問題