为什么我的登录屏幕崩溃了?

时间:2012-03-10 23:14:34

标签: android database sqlite cursor

我在我的应用上使用本地登录系统。

重点是在给定数据库中搜索用户名,提取正确的数据库条目然后比较密码(非常简单,对吧?)

然而,我正在接近我的活动。下面是我正在使用的代码

数据库功能:

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)

对此的任何帮助都会很棒。我真的很难过,无法弄清楚......

1 个答案:

答案 0 :(得分:2)

唯一可能是db为空,确保为其分配了数据库,应该是这样的:

db = getReadableDatabase();

如何查找 - 调用的最后一个方法(在调用堆栈中)是:

pirelli.app.dbadapter.PirelliDBAdapter.loginUser(PirelliDBAdapter.java:391)

所以必须使用loginUser方法。现在,前两行不可能,因为你没有取消任何东西,或者在对象上调用任何方法。此外,它不能是最后一行,因为您正在检查null。