每当我重新运行应用程序时,都无法登录到应用程序

时间:2014-01-20 04:49:56

标签: java android

我正在按照教程进行登录页面。

如果我在注册后直接登录,我的登录工作正常。

然而,当我再次运行应用程序时,使用与我注册时相同的登录信息, 它将举报一条消息,说明“密码/用户名无效”, 我查看了我的数据库,数据在我的数据库中 但我不知道为什么我不能登录..

这是我的代码: 有人可以帮帮我吗?

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();
        }

}

2 个答案:

答案 0 :(得分:0)

不确定,但这里有一些想法:

  1. 检查大小写,您使用以下代码

      if(password.equals(storedPassword))
    
  2. 这需要您的密码和存储的密码才能完全匹配。

    尝试放置一个调试语句并检查数据库实际返回的密码!

答案 1 :(得分:0)

我可能错了,如果不仔细看看DataBaseHelper.class就很难说,但这是我的2美分:我觉得每次重新启动应用程序(重新创建LoginDataBaseAdapter)时都会发生的事情正在重新创建你的数据库,所以首先启动它创建它然后你通过注册并用正确的值填充它,所以这些用于你的以下登录。但是当你离开并重新启动app时,它会重写DB并将其清空。