Debug日志-Android-SQLite

三月二十九日,遇到了一个关于SQLite的Bug。


其结果就是,每次我在登陆界面只要一填完账号密码,再点击登陆,就会闪退。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package com.example.reby;

······

public class LoginActivity extends AppCompatActivity implements View.OnClickListener {
private EditText edit_account, edit_password;
private Button btn_login,btn_register;
private DBHelper dbHelper;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置状态栏的全透明
/* if (Build.VERSION.SDK_INT >= 21) {
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
getWindow().setStatusBarColor(Color.TRANSPARENT);
}*/
//设置状态栏的半透明
if(Build.VERSION.SDK_INT >= 21) {
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
setContentView(R.layout.activity_login);
ActionBar actionBar = getSupportActionBar();
if(actionBar != null){
actionBar.hide();
}
activityInit();
}
public void activityInit(){
edit_account = (EditText) findViewById(R.id.et_login_account);
edit_account.setOnEditorActionListener(new TextView.OnEditorActionListener(){
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(actionId == EditorInfo.IME_ACTION_DONE){
edit_account.clearFocus();
}
return false;
}
});
edit_password = (EditText)findViewById(R.id.et_login_password);
//密码隐藏
edit_password.setTransformationMethod(PasswordTransformationMethod.getInstance());
edit_password.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(actionId == EditorInfo.IME_ACTION_DONE){
edit_password.clearFocus();
}
return false;
}
});
btn_login = (Button)findViewById(R.id.btn_login);
btn_register = (Button)findViewById(R.id.btn_sign_up);
btn_login.setOnClickListener(this);
btn_register.setOnClickListener(this);
}
@Override
public void onClick(View view){
switch(view.getId()){
case R.id.btn_login:
if(edit_account.getText().toString().trim().equals("")|edit_password.getText().toString().trim().equals("")){
Toast.makeText(this,"请完善您的信息",Toast.LENGTH_SHORT).show();
}else{
userInfoIsRight();
}
break;
case R.id.btn_sign_up:
Intent intent = new Intent(LoginActivity.this, RegisterActivity.class);
startActivity(intent);
break;
}

}
protected void userInfoIsRight(){
if(isRight(edit_account.getText().toString(),edit_password.getText().toString())){
Intent i = new Intent(LoginActivity.this,MainActivity.class);
startActivity(i);
}else{
Toast.makeText(this,"账号或密码错误",Toast.LENGTH_SHORT).show();
}
}
public boolean isRight(String edit_account, String edit_password){
dbHelper=new DBHelper(this,DBHelper.DATABASE_NAME,null,DBHelper.DATABASE_VERSION);//对dbHelper进行实体化
SQLiteDatabase db = dbHelper.getWritableDatabase();
String sql = "Select * from usertable where username = ? and password = ?";
Cursor cursor = db.rawQuery(sql, new String[]{edit_account, edit_password});
if(cursor.moveToFirst()){
cursor.close();
return true;
}
return false;
}
}

在金韬学长的帮助下,我成功找到了Bug

1
SQLiteDatabase db = dbHelper.getWritableDatabase();

我在之前只是声明了dbHelper,但是并没有给他任何实体,所以它不能调用方法。
修改方案就是给它一个实体

1
2
dbHelper=new DBHelper(this,DBHelper.DATABASE_NAME,null,DBHelper.DATABASE_VERSION);//对dbHelper进行实体化
SQLiteDatabase db = dbHelper.getWritableDatabase();

然后就成功了。

-------------本文结束感谢您的阅读-------------