2011-02-28 82 views
1

验证我有3 Java文件 我)DBAdapter.java II)signup.java III)login.java 四一个是菜单,但没有必要在此提及。安卓:如何创建登录页面是从数据库

现在我想这样做,当用户来登录页面,并在编辑视图中输入用户名和密码,检查数据库中的数据和重定向到菜单,如果发现匹配。 我不知道如何做到这一点,这里是DBAdapter.java我的代码文件和login.java

DBAdapter.java

public class DBAdapter 
{ 
    public static final String KEY_ROWID = "_id"; 
    public static final String KEY_FIRSTNAME = "FirstName"; 
    public static final String KEY_LASTNAME = "LastName"; 
    public static final String KEY_USERNAME = "UserName"; 
    public static final String KEY_PASSWORD = "Password";  
    private static final String TAG = "DBAdapter"; 

    private static final String DATABASE_NAME = "master"; 
    private static final String DATABASE_TABLE = "register"; 
    private static final int DATABASE_VERSION = 1; 

    private static final String DATABASE_CREATE = 
     "create table titles (_id integer primary key autoincrement, " 
     + "FirstName text not null, LastName text not null, " 
     + "UserName text not null, Password text not null);"; 

    private final Context context; 

    private DatabaseHelper DBHelper; 
    private SQLiteDatabase db; 

    public DBAdapter(Context ctx) 
    { 
     this.context = ctx; 
     DBHelper = new DatabaseHelper(context); 
    } 

    private static class DatabaseHelper extends SQLiteOpenHelper 
    { 
     DatabaseHelper(Context context) 
     { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) 
     { 
      db.execSQL(DATABASE_CREATE); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, 
     int newVersion) 
     { 
      Log.w(TAG, "Upgrading database from version " + oldVersion 
        + " to " 
        + newVersion + ", which will destroy all old data"); 
      db.execSQL("DROP TABLE IF EXISTS titles"); 
      onCreate(db); 
     } 
    } 

login.java

public class login extends Activity { 

    private EditText username; 
    private EditText password; 

    public String user_name; 
    public String pass_word; 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.login); 

     username = (EditText) findViewById(R.id.ev_unameLogin); 
     password = (EditText) findViewById(R.id.ev_passwordLogin); 

     final Button button = (Button) findViewById(R.id.btn_login); 
     button.setOnClickListener(new View.OnClickListener() {   
      public void onClick(View v) {    

       user_name = username.getText().toString(); 
       pass_word = password.getText().toString(); 

       Intent goToNextActivity = new Intent(getApplicationContext(), menu.class); 
       startActivity(goToNextActivity); 


      } 
     });     


    } 
} 

那么什么我应该更新这两个文件..

非常感谢提前

+0

究竟是什么问题?你不知道如何完成什么? – Guy 2011-02-28 09:20:34

+0

que是我如何在数据库中提取检索数据(在user_name和pass_word中)。总之是注册与否。 – Harry 2011-02-28 09:25:33

回答

3

在您需要创建一个方法来访问数据库,例如数据库类。

public boolean validateUser(String username, String password){ 
    Cursor c = getReadableDatabase().rawQuery(
      "SELECT * FROM " + TABLE_NAME + " WHERE " 
        + USER_NAME + "='" + username +"'AND "+PASSWORD+"='"+password+"'" , null); 
    if (c.getCount>0) 
     return true; 
     return false; 
} 

你当然需要创建一些数据库表像

public void createTable(SQLiteDatabase database) { 
    String creationString = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME 
      + " (_id INTEGER PRIMARY KEY AUTOINCREMENT, " 
      + USER_NAME + " TEXT NOT NULL, " 
      + PASSWORD + " TEXT NOT NULL, " 
      ");"; 
    database.execSQL(creationString); 
} 

而且有变量,如TABLE_NAME这显然是要为表的名称,USER_NAME它代表用户名列的名称,以及PASSWORD的名称。

您需要在数据库的onCreate中调用createTable()方法。

要使用数据库的登录按钮,你可以这样做:

if (myDatabase.vaidateUser(user_name,pass_word)) { 
    Intent goToNextActivity = new Intent(getApplicationContext(), menu.class); 
    startActivity(goToNextActivity); 

} 
else 
    Toast.makeText(mContext, "Wrong username/password", Toast.LENGTH_LONG).show(); 

希望这有助于。我给了你一个很好的起点。还有其他一些你需要自己去解决的东西,但是这应该会给你一个关于它是如何工作的以及接下来要去哪里的好主意(比如把记录添加到数据库等)。你将需要创建一些变量等,但这并不困难!

+0

我会尝试这个肯定... – Harry 2011-02-28 12:16:18

+0

嘿伙计我已经收到“getReadableDatabase()”和“getCount”错误,当我在我的DBAdapter.java文件中写入此代码..所以我必须导入任何包它??? 在此先感谢 – Harry 2011-03-01 04:43:44

+0

修改一点点,即时通讯完成这个逻辑...非常感谢你的回复 – Harry 2011-03-01 12:20:30

1

public void onClick(View v)方法应该调用一个方法来验证用户。

公共无效的onClick(视图v){

  user_name = username.getText().toString(); 
      pass_word = password.getText().toString(); 
      if(validate(user_name, pasass_word)); 
      {    
       Intent goToNextActivity = new Intent(getApplicationContext(), menu.class); 
      startActivity(goToNextActivity); 
      } 
     } 




public boolean validate(String name,String password) { 
    String url = "http://n.n.n.n:nnnn/WebServicePro/services/Authentication";/*give Ip addres:portnumber*/ 
    String nameSpace="http://com.xxx.yy"; /**give proper namespace*/ 
    String methoName= "authenticate"; /*This method is an operation in the webservice*/ 
    SoapObject request = new SoapObject(nameSpace,methoName); 

    request.addProperty("in0",name); 
    request.addProperty("in1",password); 

    try { 
    resultsRequestSOAP = makeSoapCall(request, "", url); 
     if(resultsRequestSOAP.toString().equalsIgnoreCase("true")){  
     return true; 
      } 
    else{  /*handle error*/} 
    }catch (Exception exp) {    
     /*handle exception*/} 
    return false; 
} 
+1

嘿,我是新手到android,所以我不明白你在做什么在验证类(字符串url,命名空间,methoname和肥皂对象) 可以请你解释我...非常感谢你的回应 ,并提前感谢这个... – Harry 2011-02-28 09:33:08

+0

这里是使用webservice验证user.'authenticate()'是web服务中处理验证机制的操作。'url'和'namespace'是访问它所必需的。 – Sora 2011-03-01 06:24:34

+0

所以我要写在URL和名称空间部分...有点混淆......感谢您的反应和预先感谢... – Harry 2011-03-01 10:06:14