我在我的应用上使用本地登录系统。
重点是在给定数据库中搜索用户名,提取正确的数据库条目然后比较密码(非常简单,对吧?)
然而,我正在接近我的活动。下面是我正在使用的代码
数据库功能:
public Cursor loginUser(String username) throws SQLException{
String[] columns = new String[] {KEY_ROW_ID_USER, KEY_USER_NAMES, KEY_USER_PASSWORDS, KEY_USER_ACCESS};
String whereClause = KEY_USER_ACCESS+"='" + username+ "'";
Cursor cursor = db.query(USERS_TABLE, columns, whereClause, null, null, null, null);
if(cursor != null){
cursor.moveToFirst();
}
return cursor;
}
初始化dbAdapter:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.loginscreen);
dbAdapter = new PirelliDBAdapter(this);
.......................................
调用该功能:
loginButton.setOnClickListener(new OnClickListener(){
public void onClick(View view){
username = usernameInput.getText().toString();
password = passwordInput.getText().toString();
Cursor c = dbAdapter.loginUser(usernameInput.getText().toString());
}
});
最后是错误日志:
03-11 01:08:25.225: W/dalvikvm(1563): threadid=1: thread exiting with uncaught exception (group=0x40014760)
03-11 01:08:25.235: E/AndroidRuntime(1563): FATAL EXCEPTION: main
03-11 01:08:25.235: E/AndroidRuntime(1563): java.lang.NullPointerException
03-11 01:08:25.235: E/AndroidRuntime(1563): at pirelli.app.dbadapter.PirelliDBAdapter.loginUser(PirelliDBAdapter.java:391)
03-11 01:08:25.235: E/AndroidRuntime(1563): at pirelli.app.LoginScreen$8.onClick(LoginScreen.java:176)
03-11 01:08:25.235: E/AndroidRuntime(1563): at android.view.View.performClick(View.java:3110)
03-11 01:08:25.235: E/AndroidRuntime(1563): at android.view.View$PerformClick.run(View.java:11934)
03-11 01:08:25.235: E/AndroidRuntime(1563): at android.os.Handler.handleCallback(Handler.java:587)
03-11 01:08:25.235: E/AndroidRuntime(1563): at android.os.Handler.dispatchMessage(Handler.java:92)
03-11 01:08:25.235: E/AndroidRuntime(1563): at android.os.Looper.loop(Looper.java:132)
03-11 01:08:25.235: E/AndroidRuntime(1563): at android.app.ActivityThread.main(ActivityThread.java:4123)
03-11 01:08:25.235: E/AndroidRuntime(1563): at java.lang.reflect.Method.invokeNative(Native Method)
03-11 01:08:25.235: E/AndroidRuntime(1563): at java.lang.reflect.Method.invoke(Method.java:491)
03-11 01:08:25.235: E/AndroidRuntime(1563): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
03-11 01:08:25.235: E/AndroidRuntime(1563): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
03-11 01:08:25.235: E/AndroidRuntime(1563): at dalvik.system.NativeStart.main(Native Method)
对此的任何帮助都会很棒。我真的很难过,无法弄清楚......
答案 0 :(得分:2)
唯一可能是db
为空,确保为其分配了数据库,应该是这样的:
db = getReadableDatabase();
如何查找 - 调用的最后一个方法(在调用堆栈中)是:
pirelli.app.dbadapter.PirelliDBAdapter.loginUser(PirelliDBAdapter.java:391)
所以必须使用loginUser
方法。现在,前两行不可能,因为你没有取消任何东西,或者在对象上调用任何方法。此外,它不能是最后一行,因为您正在检查null。