2016-03-06 105 views
-2

我正在做android应用程序开发和登录模块工作现在我正在尝试注册,如果用户名已存在,则显示用户名已存在并且用户应该登录的消息。注册并登录无法正常工作

我的代码 //注册

public void addButtonClicked(View view) { 
    LogIn ln = new LogIn(username.getText().toString(), password.getText().toString()); 

    dbHandler.addUser(ln); 
    printDatabase(); 
    Toast.makeText(this, "Saved", Toast.LENGTH_LONG).show(); 
    boolean r = dbHandler.CheckIsDataAlreadyInDBorNot(username.getText().toString()); 
    if (r) { 
     Toast.makeText(this, "Username already exists", Toast.LENGTH_LONG).show(); 
    } 
} 

//用于登录,登录就应该移动到下一个活动,但它不工作

public void buttonClicked() { 
    boolean h = dbHandler.CheckIsDataAlreadyInDBorNot(username.getText().toString()); 
    if (h) { 

     Intent i = new Intent(getApplicationContext(), third.class); 
     startActivity(i); 
    } 

} 

// DB后处理程序代码

 public boolean CheckIsDataAlreadyInDBorNot(String fieldValue) { 
     SQLiteDatabase db = getWritableDatabase(); 
     String Query = "Select * from " + TABLE_LOGIN + " where " + COLUMN_USERNAME + " = " + fieldValue; 
     Cursor cursor = db.rawQuery(Query, null); 
     if(cursor.getCount() == 0){ 
      cursor.close(); 

      return false; 
     } 
     cursor.close(); 
     return true; 
    } 

登录分类信息

public class LogIn { 
private int _id; 
private String _username; 
private String _password; 

public LogIn(){ 
} 

public LogIn(String username,String password){ 
    this._username = username; 
    this._password = password; 

} 

public void set_id(int _id) { 
    this._id = _id; 
} 


public void set_password(String _password) { 
    this._password = _password; 
} 

public int get_id() { 

    return _id; 
} 

public String get_username() { 
    return _username; 
} 

public String get_password() { 
    return _password; 
} 

public void set_username(String _username) { 

    this._username = _username; 
} 

}

+0

请提供登录类的细节。 – HoseinIT

+0

您将用户添加到数据库,然后检查它是否在那里,并想知道它为什么在那里? – Henry

+0

“它不工作”究竟意味着什么? – Henry

回答

0

我会尽量建议/纠正我认为这是造成问题, 发布您的logcat领域或任何错误都将帮助更多...

1- addButton的逻辑:

你应该检查用户是否已经存在,并根据这个动作 当前你插入一条记录,然后检查它是否存在,因此r将永远是true

变化的方法如下:我想虽然我认为你应该使用query()

A.你有方法CheckIsDataAlreadyInDBorNot() 在SQL查询错误

public void addButtonClicked(View view) { 

    boolean r = dbHandler.CheckIsDataAlreadyInDBorNot(username.getText().toString()); 
    if (r) { 
     Toast.makeText(this, "Username already exists", Toast.LENGTH_LONG).show(); 
     return; 
    }else{ 
     LogIn ln = new LogIn(username.getText().toString(), password.getText().toString()); 

     dbHandler.addUser(ln); 
     printDatabase(); 
     Toast.makeText(this, "Saved", Toast.LENGTH_LONG).show(); 
    } 
} 

2-修复当前代码:您遗漏了包含该值的单个问题(因为它是字符串)where userName='Smith'

public boolean CheckIsDataAlreadyInDBorNot(String fieldValue) { 
    SQLiteDatabase db = getWritableDatabase(); 
    String Query = "Select * from " + TABLE_LOGIN + " where " + COLUMN_USERNAME + " = '" + fieldValue + "'"; 
    Cursor cursor = db.rawQuery(Query, null); 
    if(cursor.getCount() == 0){ 
     cursor.close(); 

     return false; 
    } 
    cursor.close(); 
    return true; 
} 

B.使用query()

public boolean CheckIsDataAlreadyInDBorNot(String fieldValue) { 
    SQLiteDatabase db = getWritableDatabase(); 
    Cursor cursor = db.query(TABLE_LOGIN, null, COLUMN_USERNAME+"=?", new String[]{fieldValue}, null, null, null); 
    if(cursor.getCount() == 0){ 
     cursor.close(); 
     return false; 
    } 
    cursor.close(); 
    return true; 
} 
+0

实际上,在运行代码时没有错误或异常,但是当我单击其中一个登录或注册按钮时,它显示应用程序已停止工作.i已经注意到它是由于我正在使用的语句导致的。可能的其他解 – ishaarora95

+0

当你得到这个消息(应用程序已经停止)时,必须有一个异常,并且异常有一个'stackTrace',这个stackTrace可以在logcat中找到,你需要在这里得到它,所以我们可以找出问题所在,其他比它会很难猜测... – Yazan