2016-09-25 115 views
-3

我是Android編程的初學者,我試圖使登錄功能。這個系統將被兩個用戶admin和用戶訪問。管理員只需輸入用戶名和密碼的「admin」即可訪問系統。但是,用戶在登錄系統之前需要註冊他們的賬戶。登錄(無法從數據庫中檢索數據)

我認爲註冊沒有問題。但是,當我嘗試登錄帳戶時,它說用戶名和密碼不匹配。我認爲它無法從數據庫中檢索數據。請幫我檢查註冊和登錄功能代碼。謝謝

MainActivity.java

public void onclickLogin(View view) { 
Toast.makeText(getBaseContext(), "Please wait....", Toast.LENGTH_LONG).show(); 
txtusername = Username.getText().toString(); 
txtpassword = Password.getText().toString(); 
DatabaseOperations dop = new DatabaseOperations(this, null, null, 1); 
Cursor CR = dop.getInformation(dop); 
CR.moveToFirst(); 
boolean login_status = false; 
String NAME = ""; 
if (txtusername.equals("Admin") && (txtpassword).equals("Admin")) { 
    Intent in = new Intent(MainActivity.this, AdminMenu.class); 
    startActivity(in); 
} else { 
    do { 
     if (txtusername.equals(CR.getColumnIndex(TableData.TableInfo.USERNAME)) && (txtpassword.equals(CR.getColumnIndex(TableData.TableInfo.USERPASS)))) { 
      login_status = true; 
      NAME = CR.getString(CR.getColumnIndex(TableData.TableInfo.USERNAME)); 
     } 
    } while (CR.moveToNext()); 
    if (login_status) { 
     Toast.makeText(getBaseContext(), "Login Success....\n Welcome " + NAME, Toast.LENGTH_LONG).show(); 
     Intent i=new Intent(MainActivity.this,UserMenu.class); 
     Bundle bundle=new Bundle(); 
     bundle.putString("username",NAME); 
     i.putExtras(bundle); 
     startActivity(i); 
     finish(); 
    } else { 
     Toast.makeText(getBaseContext(), "Login Failed...", Toast.LENGTH_LONG).show(); 
    } 

DatabaseOperations.java

public Cursor getInformation(DatabaseOperations dob) 
{ 
SQLiteDatabase database=dob.getReadableDatabase(); 
String[] columns={TableInfo.USERNAME,TableInfo.USERPASS}; 
Cursor cr=database.query(TableInfo.TABLE_NAME,columns,null,null,null,null,null); 
return cr; 
} 

public void putInformation(Account account) { 
ContentValues cv = new ContentValues(); 
cv.put(TableInfo.USERNAME, account.get_username()); 
cv.put(TableInfo.USERPASS, account.get_password()); 
cv.put(TableInfo.USERPHONE, account.get_Phone()); 
cv.put(TableInfo.USEREMAIL, account.get_Email()); 
cv.put(TableInfo.USERCARPLATE1, account.get_CarPlate1()); 
cv.put(TableInfo.USERFULLNAME, account.get_FullName()); 
cv.put(TableInfo.USERIC, account.get_IdentityCard()); 
SQLiteDatabase SQ = this.getWritableDatabase(); 
SQ.insert(TableInfo.TABLE_NAME, null, cv); 
Log.d("Database operations", "One row inserted"); 
SQ.close(); 
} 

RegisterPage.java

public void onclickRegistering(View view) 
    { 
      registerusername=RegisterUsername.getText().toString(); 
      registerpassword=RegisterPassword.getText().toString(); 
      conpassword=ConPassword.getText().toString(); 
      phone=Phone.getText().toString(); 
      email=Email.getText().toString(); 
      identitycard=IdentityCard.getText().toString(); 
      fullname=FullName.getText().toString(); 
      carplate=CarPlate.getText().toString(); 
      if(!(registerpassword.equals(conpassword))) 
      { 
       Toast.makeText(getBaseContext(),"Passwords are not matching",Toast.LENGTH_LONG).show(); 
       RegisterUsername.setText(""); 
       RegisterPassword.setText(""); 
       ConPassword.setText(""); 
       Phone.setText(""); 
       Email.setText(""); 
       IdentityCard.setText(""); 
       FullName.setText(""); 
       CarPlate.setText(""); 
      } 
      else 
      { 
       DatabaseOperations db=new DatabaseOperations(this,null,null,1); 
       Account user=new Account(registerusername,registerpassword,Integer.parseInt(phone),email,Integer.parseInt(identitycard),fullname,carplate); 
       db.putInformation(user); 
       Toast.makeText(getBaseContext(),"Register Successfully...",Toast.LENGTH_LONG).show(); 
       Intent in=new Intent(register_page.this,MainActivity.class); 
       startActivity(in); 
       finish(); 
      } 

     } 
+0

你來自哪裏,數據庫 – androidXP

+0

對不起,我忘了加上寄存器功能剛纔 – Jayson

+0

嘗試用名稱'0'和密碼'1'登錄獲取數據。 –

回答

0

在下面的代碼片段你想比較這兩個用戶名和密碼取回從數據庫中只用用戶名 - 希望這可能是你getti的原因該錯誤。

do { 
    if (txtusername.equals(CR.getColumnIndex(TableData.TableInfo.USERNAME)) && (txtpassword.equals(CR.getColumnIndex(TableData.TableInfo.USERPASS)))) { 
     login_status = true; 
     NAME = CR.getString(CR.getColumnIndex(TableData.TableInfo.USERNAME)); 
    } 
} while (CR.moveToNext()); 

參考以下鏈接 Using SQlite to validate Logins in Android

+0

謝謝,現在我可以執行我的程序了 – Jayson