Android 应用程序在特定事件后不断崩溃
Android App keeps crashing after a certain event
我是 android 中的编码新手。我编写了一个非常简单的注册和登录方法。
每次我注册后尝试登录,应用程序都停止工作。
我的 OnClickListener
bLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String username = etUsername.getText().toString();
String password = etPassword.getText().toString();
String pass = helper.searchPass(username);
if(password.equals(pass))
{
Intent i = new Intent(LoginActivity.this, UserAreaActivity.class);
LoginActivity.this.startActivity(i);
}
else
{
Toast wrgPass = Toast.makeText(LoginActivity.this, "Username and password don't match!" , Toast.LENGTH_SHORT);
wrgPass.show();
}
}
});
我的 searchPass 方法
public String searchPass(String username)
{
db = this.getReadableDatabase();
String query = "select username, password from "+ TABLE_NAME;
Cursor cursor = db.rawQuery(query, null);
String a,b;
//a is Username and b is Password
b = "not found";
if(cursor.moveToFirst())
{
do{
a = cursor.getString(0);
b = cursor.getString(1);
if (a.equals(username))
{
b = cursor.getString(1);
break;
}
}
while(cursor.moveToNext());
}
return b;
}
还有我对 SQLite DB 的声明
public class DatabaseHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "contacts.db";
private static final String TABLE_NAME = "contacts";
private static final String COLUMN_ID = "id";
private static final String COLUMN_NAME = "name";
private static final String COLUMN_EMAIL = "email";
private static final String COLUMN_USERNAME = "username";
private static final String COLUMN_PASSWORD = "password";
SQLiteDatabase db;
private static final String TABLE_CREATE = "create table " +TABLE_NAME + "("
+ COLUMN_ID +"integer primary key,"
+ COLUMN_NAME + " text,"
+ COLUMN_EMAIL + " text,"
+ COLUMN_PASSWORD + " text,"
+ COLUMN_USERNAME + " text )";
public DatabaseHelper(Context context)
{
super(context , DATABASE_NAME , null , DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL(TABLE_CREATE);
this.db = db;
}
堆栈跟踪
Process: com.example.lenovo.loginappv2, PID: 6022
android.database.sqlite.SQLiteException: no such column: username (code 1): , while compiling: select username, passwordcontacts
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
我不确定哪里出错了。如果可以为解决方案提供解释会很有帮助,因为我对 Android 语言还是很陌生。
编辑:将 Imgur 添加到 stackTrace
编辑 2:删除了 Imgur 并添加了 StackTrace 的前几行
您的查询有误。
改为
String theParameter = " WHERE " + "username='" + username + "'";
String query = "SELECT * FROM " + TABLE_NAME + theParameter;
这是你的完整方法:
public String searchPass(String username)
{
db = this.getReadableDatabase();
Sring theParameter = " WHERE " + "username='" + username + "'";
String query = "SELECT * FROM " + TABLE_NAME + theParameter;
Cursor cursor = db.rawQuery(query, null);
String a,b;
//a is Username and b is Password
b = "not found";
if(cursor.moveToFirst())
{
do{
a = cursor.getString(0);
b = cursor.getString(1);
if (a.equals(username))
{
b = cursor.getString(1);
break;
}
}
while(cursor.moveToNext());
}
return b;
}
我是 android 中的编码新手。我编写了一个非常简单的注册和登录方法。 每次我注册后尝试登录,应用程序都停止工作。
我的 OnClickListener
bLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String username = etUsername.getText().toString();
String password = etPassword.getText().toString();
String pass = helper.searchPass(username);
if(password.equals(pass))
{
Intent i = new Intent(LoginActivity.this, UserAreaActivity.class);
LoginActivity.this.startActivity(i);
}
else
{
Toast wrgPass = Toast.makeText(LoginActivity.this, "Username and password don't match!" , Toast.LENGTH_SHORT);
wrgPass.show();
}
}
});
我的 searchPass 方法
public String searchPass(String username)
{
db = this.getReadableDatabase();
String query = "select username, password from "+ TABLE_NAME;
Cursor cursor = db.rawQuery(query, null);
String a,b;
//a is Username and b is Password
b = "not found";
if(cursor.moveToFirst())
{
do{
a = cursor.getString(0);
b = cursor.getString(1);
if (a.equals(username))
{
b = cursor.getString(1);
break;
}
}
while(cursor.moveToNext());
}
return b;
}
还有我对 SQLite DB 的声明
public class DatabaseHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "contacts.db";
private static final String TABLE_NAME = "contacts";
private static final String COLUMN_ID = "id";
private static final String COLUMN_NAME = "name";
private static final String COLUMN_EMAIL = "email";
private static final String COLUMN_USERNAME = "username";
private static final String COLUMN_PASSWORD = "password";
SQLiteDatabase db;
private static final String TABLE_CREATE = "create table " +TABLE_NAME + "("
+ COLUMN_ID +"integer primary key,"
+ COLUMN_NAME + " text,"
+ COLUMN_EMAIL + " text,"
+ COLUMN_PASSWORD + " text,"
+ COLUMN_USERNAME + " text )";
public DatabaseHelper(Context context)
{
super(context , DATABASE_NAME , null , DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL(TABLE_CREATE);
this.db = db;
}
堆栈跟踪
Process: com.example.lenovo.loginappv2, PID: 6022
android.database.sqlite.SQLiteException: no such column: username (code 1): , while compiling: select username, passwordcontacts
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
我不确定哪里出错了。如果可以为解决方案提供解释会很有帮助,因为我对 Android 语言还是很陌生。
编辑:将 Imgur 添加到 stackTrace
编辑 2:删除了 Imgur 并添加了 StackTrace 的前几行
您的查询有误。
改为
String theParameter = " WHERE " + "username='" + username + "'";
String query = "SELECT * FROM " + TABLE_NAME + theParameter;
这是你的完整方法:
public String searchPass(String username)
{
db = this.getReadableDatabase();
Sring theParameter = " WHERE " + "username='" + username + "'";
String query = "SELECT * FROM " + TABLE_NAME + theParameter;
Cursor cursor = db.rawQuery(query, null);
String a,b;
//a is Username and b is Password
b = "not found";
if(cursor.moveToFirst())
{
do{
a = cursor.getString(0);
b = cursor.getString(1);
if (a.equals(username))
{
b = cursor.getString(1);
break;
}
}
while(cursor.moveToNext());
}
return b;
}