2012-03-10 37 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