2014-01-20 142 views
2

我正在按照教程進行登錄頁面。都無法登錄到應用程序

我的登錄工作正常,如果我登錄後直接登錄。

然而,當我再次運行應用程序,使用相同的登錄信息,因爲我已經註冊, 它將敬酒一條消息,指出「無效的密碼/用戶名」, 我把我的數據庫一看,該數據是在我的數據庫 ,但我不知道爲什麼我不能登錄..

這是我的代碼: 有人可以幫我嗎?

LoginDataBaseAdapter.java

public class LoginDataBaseAdapter { 
    static final String DATABASE_NAME = "login.db"; 
    static final int DATABASE_VERSION = 1; 
    public static final int NAME_COLUMN = 1; 
    // TODO: Create public field for each column in your table. 
    // SQL Statement to create a new database. 
    static final String DATABASE_CREATE = "create table "+"LOGIN"+ 
            "(" +"ID"+" integer primary key autoincrement,"+ "USERNAME text,PASSWORD text); "; 
    // Variable to hold the database instance 
    public SQLiteDatabase db; 
    // Context of the application using the database. 
    private final Context context; 






    // Database open/upgrade helper 
    private DataBaseHelper dbHelper; 



    public LoginDataBaseAdapter(Context _context) 
    { 
     context = _context; 
     dbHelper = new DataBaseHelper(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 
    public LoginDataBaseAdapter open() throws SQLException 
    { 
     db = dbHelper.getWritableDatabase(); 
     return this; 
    } 
    public void close() 
    { 
     db.close(); 
    } 

    public SQLiteDatabase getDatabaseInstance() 
    { 
     return db; 
    } 

    public void insertEntry(String userName,String password) 
    { 
     ContentValues newValues = new ContentValues(); 
     // Assign values for each row. 
     newValues.put("USERNAME", userName); 
     newValues.put("PASSWORD",password); 

     // Insert the row into your table 
     db.insert("LOGIN", null, newValues); 
     ///Toast.makeText(context, "Reminder Is Successfully Saved", Toast.LENGTH_LONG).show(); 
    } 
    public int deleteEntry(String UserName) 
    { 
     //String id=String.valueOf(ID); 
     String where="USERNAME=?"; 
     int numberOFEntriesDeleted= db.delete("LOGIN", where, new String[]{UserName}) ; 
     // Toast.makeText(context, "Number fo Entry Deleted Successfully : "+numberOFEntriesDeleted, Toast.LENGTH_LONG).show(); 
     return numberOFEntriesDeleted; 
    }  
    public String getSinlgeEntry(String userName) 
    { 
     Cursor cursor=db.query("LOGIN", null, " USERNAME=?", new String[]{userName}, null, null, null); 
     if(cursor.getCount()<1) // UserName Not Exist 
     { 
      cursor.close(); 
      return "NOT EXIST"; 
     } 
     cursor.moveToFirst(); 
     String password= cursor.getString(cursor.getColumnIndex("PASSWORD")); 
     cursor.close(); 
     return password;     
    } 
    public void updateEntry(String userName,String password) 
    { 
     // Define the updated row content. 
     ContentValues updatedValues = new ContentValues(); 
     // Assign values for each row. 
     updatedValues.put("USERNAME", userName); 
     updatedValues.put("PASSWORD",password); 

     String where="USERNAME = ?"; 
     db.update("LOGIN",updatedValues, where, new String[]{userName});    
    }   
    public class DataBaseHelper extends SQLiteOpenHelper 
    { 
     public DataBaseHelper(Context context, String name,CursorFactory factory, int version) 
     { 
        super(context, name, factory, version); 
     } 
     // Called when no database exists in disk and the helper class needs 
     // to create a new one. 
     @Override 
     public void onCreate(SQLiteDatabase _db) 
     { 
       _db.execSQL(LoginDataBaseAdapter.DATABASE_CREATE); 

     } 
     // Called when there is a database version mismatch meaning that the version 
     // of the database on disk needs to be upgraded to the current version. 
     @Override 
     public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion) 
     { 
       // Log the version upgrade. 
       Log.w("TaskDBAdapter", "Upgrading from version " +_oldVersion + " to " +_newVersion + ", which will destroy all old data"); 

       // Upgrade the existing database to conform to the new version. Multiple 
       // previous versions can be handled by comparing _oldVersion and _newVersion 
       // values. 
       // The simplest case is to drop the old table and create a new one. 
       _db.execSQL("DROP TABLE IF EXISTS " + "TEMPLATE"); 
       // Create a new one. 
       onCreate(_db); 
     } 



    } 

}//close DBAdapter 

homeactivity.java

public class homeActivity extends Activity{ 
    Button btnSignIn,btnSignUp; 
    Button btnAbout; 
    LoginDataBaseAdapter loginDataBaseAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.homescreen); 
     // create a instance of SQLite Database 
     loginDataBaseAdapter=new LoginDataBaseAdapter(this); 
     loginDataBaseAdapter=loginDataBaseAdapter.open(); 

     // Get The Reference Of Buttons 
     btnSignIn=(Button)findViewById(R.id.buttonSignIN); 
     btnSignUp=(Button)findViewById(R.id.buttonSignUP); 
     btnAbout=(Button)findViewById(R.id.aboutBTN); 

     // Set OnClick Listener on SignUp button 
      btnSignUp.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       /// Create Intent for SignUpActivity abd Start The Activity 
       Intent intentSignUP=new Intent(getApplicationContext(),SignUpActivity.class); 
       startActivity(intentSignUP); 
       } 
      }); 



      // set OnClick Listener on About button 
      btnAbout.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 

        /// Create Intent for About and start activity 
        Intent intentAbout=new Intent(getApplicationContext(),about.class); 
        startActivity(intentAbout); 
        } 
       }); 


     } 
    // Methods to handleClick Event of Sign In Button 
     public void signIn(View V) 
      { 
       final Dialog dialog = new Dialog(homeActivity.this); 
       dialog.setContentView(R.layout.login); 
       dialog.setTitle("Login"); 

       // get the Refferences of views 
       final EditText editTextUserName=(EditText)dialog.findViewById(R.id.editTextUserNameToLogin); 
       final EditText editTextPassword=(EditText)dialog.findViewById(R.id.editTextPasswordToLogin); 

       Button btnSignIn=(Button)dialog.findViewById(R.id.buttonSignIn); 

       // Set On ClickListener 
       btnSignIn.setOnClickListener(new View.OnClickListener() { 

        public void onClick(View v) { 
         // get The User name and Password 
         String userName=editTextUserName.getText().toString(); 
         String password=editTextPassword.getText().toString(); 

         // fetch the Password form database for respective user name 
         String storedPassword=loginDataBaseAdapter.getSinlgeEntry(userName); 

         // check if the Stored password matches with Password entered by user 
         if(password.equals(storedPassword)) 
         { 
          Toast.makeText(homeActivity.this, "Welcome," + userName, Toast.LENGTH_LONG).show(); 
          dialog.dismiss(); 
          Intent mainact=new Intent(getApplicationContext(),MainActivity.class); 
          mainact.putExtra("priceEdit", "floatvalue"); 
          mainact.putExtra("pumpEdit", "floatvalue"); 
          startActivity(mainact); 


         } 
         else 
         { 
          Toast.makeText(homeActivity.this, "User Name or Password does not match", Toast.LENGTH_LONG).show(); 
         } 
        } 
       }); 

       dialog.show(); 
     } 

     @Override 
     protected void onDestroy() { 
      super.onDestroy(); 
      // Close The Database 
      loginDataBaseAdapter.close(); 
     } 

} 
+0

使用sharedpreference保存用戶名和密碼 –

+0

我不能使用登錄數據庫嗎? – Chloe

回答

0

我可能是錯的,很難說,沒有看看DataBaseHelper.class,但這裏是我的2美分:我有一種感覺,發生了什麼是每次你重新啓動應用程序(重新創建LoginDataBaseAdapter)它是重新創建數據庫,所以首先啓動它創建它,然後通過註冊並使用正確的值填充它,以便在您的以下登錄時使用它們。但是,當您離開並重新啓動應用程序時,它會重寫數據庫並將其清空。

0

不知道,但這裏有幾個想法:

  1. 檢查較低和大寫字母,你是使用以下代碼

    if(password.equals(storedPassword)) 
    

這將需要您的密碼和存儲的密碼完全匹配。

試着放一個調試語句,並檢查數據庫實際返回的密碼!

相關問題