我是Android编程的初学者,并尝试创建登录和注册活动。但是当我尝试登录时,应用程序崩溃。它在3级显示3错误。
有何评论?
代码如下:
错误消息
FATAL EXCEPTION: main
Process: com.example.demir.carsharing, PID: 2314
android.database.sqlite.SQLiteException: no such table: users (code 1): , while compiling: select * from users where email = 'demir' and password = 'demir'
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)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1318)
at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1257)
at com.example.demir.carsharing.DbHelper.getUser(DbHelper.java:66)
at com.example.demir.carsharing.LoginActivity.login(LoginActivity.java:58)
at com.example.demir.carsharing.LoginActivity.onClick(LoginActivity.java:43)
at android.view.View.performClick(View.java:5610)
at android.view.View$PerformClick.run(View.java:22265)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
申请已终止。
Dbhelper (error is in line 66 ----->Cursor cursor = db.rawQuery(selectQuery, null);)
package com.example.demir.carsharing;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DbHelper extends SQLiteOpenHelper {
public static final String TAG = DbHelper.class.getSimpleName();
public static final String DB_NAME="carsharing.db";
public static final int DB_VERSION =1;
public static final String USER_TABLE = "users";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_EMAIL = "email";
public static final String COLUMN_PASS = "password";
/*
create table users(
id integer primary key autoincrement,
email text,
password text);
*/
public static final String CREATE_TABLE_USERS = "CREATE TABLE " + USER_TABLE + "("
+ COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ COLUMN_EMAIL + " TEXT,"
+ COLUMN_PASS + " TEXT);";
public DbHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_USERS);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXIST"+USER_TABLE);
onCreate(db);
}
public void addUser(String email, String password) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COLUMN_EMAIL, email);
values.put(COLUMN_PASS, password);
long id = db.insert(USER_TABLE, null, values);
db.close();
Log.d(TAG, "user inserted" + id);
}
public boolean getUser(String email, String pass){
//HashMap<String, String> user = new HashMap<String, String>();
String selectQuery = "select * from " + USER_TABLE + " where " +
COLUMN_EMAIL + " = " + "'"+email+"'" + " and " + COLUMN_PASS + " = " + "'"+pass+"'";
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// Move to first row
cursor.moveToFirst();
if (cursor.getCount() > 0) {
return true;
}
cursor.close();
db.close();
return false;
}
}
LoginActivity.java ----&gt; error: if(db.getUser(email,pass)){..
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btnLogin:
login(); ------> here
break;
package com.example.demir.carsharing;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class LoginActivity extends AppCompatActivity implements View.OnClickListener {
private Button login,register;
private TextView etEmail,etPass;
private DbHelper db;
private Session session;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
db = new DbHelper(this);
session = new Session(this);
login =(Button)findViewById(R.id.btnLogin);
register=(Button)findViewById(R.id.btnReg);
etEmail=(EditText)findViewById(R.id.etEmail);
etPass=(EditText)findViewById(R.id.etPass);
login.setOnClickListener(this);
register.setOnClickListener(this);
if(session.loggedin()){
startActivity(new Intent(LoginActivity.this, MainActivity.class));
finish();
}
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btnLogin:
login();
break;
case R.id.btnReg:
startActivity(new Intent(LoginActivity.this, RegisterActivity.class));
break;
default:
}
}
private void login(){
String email = etEmail.getText().toString();
String pass = etPass.getText().toString();
if(db.getUser(email,pass)){
session.setLoggedin(true);
startActivity(new Intent(LoginActivity.this,MainActivity.class));
finish();
}else{
Toast.makeText(getApplicationContext(), "Wrong email/password",Toast.LENGTH_SHORT).show();
}
}
}