2016-07-29 85 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'

通过这样做,您将只返回数据库中的一行,而不是每行。你可以首先检查游标对象是否有内容(如果没有,这意味着用户名无效 - 或者至少不在你的数据库中),然后检查用户输入的密码。

希望这会有所帮助!