2016-07-29 3 views
-2

여기 로그인 옵션에 대한 내 안드로이드 코드입니다. 내게 문제가 어디 있는지 알게되었습니다. 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()를 변경하거나 (사용자 자격 증명의 유효성을 검사 할 수있는 새 메서드를 만든 경우) 두 매개 변수 (사용자 이름과 암호)를 모두 받아들이려면 쿼리를 구성하여 암호를 선택하십시오.

이 방법을 사용하면 모든 행이 아닌 데이터베이스에서 한 행만 반환합니다. 먼저 커서 객체에 무언가가 있는지 검사 할 수 있습니다 (그렇지 않은 경우 사용자 이름이 유효하지 않거나 데이터베이스에없는 것을 의미). 그런 다음 사용자가 입력 한 것과 비교하여 반환하는 비밀번호를 확인합니다.

희망이 도움이됩니다.

관련 문제