2016-07-29 144 views
-2

這裏是我的android代碼登錄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);時,您將獲得查詢爲每行選擇的第二個項目,在您的情況下,它是user_password。

我還建議稍微改變查詢來從數據庫中取出所需的信息,而不是所有的記錄。例如,您的用戶將會同時使用用戶名和密碼進行登錄(您已經在onClick()中檢索這些值),因此請使用這兩個元素來構建適當的查詢。既然你有兩個值,如果你改變了你的DatabaseHelper.getAllData()(或創建驗證用戶憑證的一種新方法)接受兩個參數(用戶名和密碼),即可查詢的結構來選擇密碼WHERE User_name = 'username'

通過這樣做,您將只返回數據庫中的一行,而不是每行。你可以首先檢查遊標對象是否有內容(如果沒有,這意味着用戶名無效 - 或者至少不在你的數據庫中),然後檢查用戶輸入的密碼。

希望這會有所幫助!