2016-05-22 84 views
-1

由于我的checkLogIn方法似乎根本不起作用,所以我现在遇到了使用android studio的问题。我想知道是否有人可以指出任何明显的缺陷?通过数据库读取数据?

编辑:当我在主要活动中调用方法时,仍然收到错误消息。在logcat中显示 “getSlotFromBufferLocked:未知缓冲区”

//Class manages all data pertaining to the login page 

公共类DBHandler扩展SQLiteOpenHelper {

//Declare constants 
private static final int DATABASE_VERSION = 1; 
private static final String DATABASE_NAME = "logindetails.db"; 
private static final String TABLE_LOGIN = "Logindetails"; 
private static final String COLUMN_ID = "_id"; 
private static final String COLUMN_LOGIN = "_logIn"; 
private static final String COLUMN_PASS = "_password"; 

//Constructor 
public DBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version){ 
    super(context, DATABASE_NAME, factory, DATABASE_VERSION); 
} 

//On create method - passes through a database object 
public void onCreate(SQLiteDatabase db){ 
    //Declares column and table names and data types 
    String query = "CREATE TABLE " + TABLE_LOGIN + "(" + 
      COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + 
      COLUMN_LOGIN + " TEXT," + 
      COLUMN_PASS + " TEXT" + 
      ");"; 
    db.execSQL(query); 
} 

//On upgrade method 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){ 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_LOGIN); 
    onCreate(db); 
} 

//Adds login details to database - Takes a login object as a parameter. 
public void addLogIn(LogIns log){ 
    //Declare values and select columns to pass values through 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 

    values.put(COLUMN_LOGIN, log.get_logIn()); 
    values.put(COLUMN_PASS, log.get_password()); 

    //Insert values into the table 
    db.insert(TABLE_LOGIN, null, values); 
    db.close(); 
} 

//reads database and gets list of logins - takes the username and password as an argument 
public boolean checkLogIn(String user, String pass){ 
    //Declare and initialise variables 
    boolean success = false; 
    SQLiteDatabase db = this.getReadableDatabase(); 
    //select columns in a string array 
    String[] columns = {COLUMN_LOGIN, COLUMN_PASS}; 

    //execute query 
    Cursor c = db.query(TABLE_LOGIN, columns, null, null, null, null, null); 

    //Temp string to store results from query 
    String rName = ""; 
    String rPass = ""; 

    //loop through all rows and data 
    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){ 
     int iName = c.getColumnIndex(COLUMN_LOGIN); 
     int iPass = c.getColumnIndex(COLUMN_PASS); 
     rName = c.getString(iName); 
     rPass = c.getString(iPass); 

     if (user.equals(rName) && pass.equals(rPass)){ 
      success = true; 
      break; 
     } 
    } 
    return success; 

} 

}

+0

SQLiteHelper对象在哪里? –

+0

你真的需要一个吗? – waterytart

+0

发布您的logcat – Nenco

回答

1

你的字符串比较不正确。

(rName == user & rPass == pass) 

与此相比引用不值,你想:

(rName.equals(user) && rPass.equals(pass)) 

这个比较实际的字符串值。

延伸阅读:

How do I compare strings in Java? What is a NullPointerException, and how do I fix it?

如果你有问题了,让我知道了意见。

+0

不幸的是我仍然得到相同的错误。 getSlotFromBufferLocked:未知的缓冲区:0x7ff0c63567a0 – waterytart

+0

@waterytart,好的,继续前进,并在发生错误时发布logcat。所以logcat是Android Studio中屏幕底部的信息。 –

+0

不能张贴照片,所以我必须使用这个http://i63.tinypic.com/2llog3c.png – waterytart