2012-03-10 38 views
0

我在我的应用程序上使用本地登录系统。为什么我的登录屏幕崩溃?

的一点是简单地搜索在给定的数据库的用户名,提取正确的数据库条目,然后比较密码(很简单,不是吗?)

但是,我得到一个强制关闭我的活动。下面你有我使用

代码

DB功能:

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

你能发布PirelliDBAdapter的更多代码,以及它在何处/如何初始化?看起来像db可能是空的? – antonyt 2012-03-10 23:43:05

+0

似乎你的分贝是空的! – 2012-03-10 23:56:16

+0

适配器类的长度超过1000行,并在许多其他活动中成功使用。我真的不明白如何可以为空。你的意思是表格本身是空的,只需插入几个用户即可解决问题。 (不在家,现在不能尝试) – Eugen 2012-03-11 01:21:08

回答

2

的事情,这可能是是db为空,请确保您指定一个数据库给它,应该是这样的:

db = getReadableDatabase(); 

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

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

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

+0

数据库不是空的,它在其他活动中的使用完全类似于这个(或者......更可能我没有得到数据库在初始化后如何为空......),并且登录函数是和精确复制 - 另一个功能,完全可以正常工作(更换用户名)... – Eugen 2012-03-11 11:18:28

+0

我刚刚得到它,我改变了从私人到公共的dbAdapter,它突然工作。 – Eugen 2012-03-11 11:20:45

+0

很高兴工作:) – MByD 2012-03-11 11:21:39