2013-06-18 23 views
0

基本上這本身並不是問題,我的代碼到目前爲止工作。接收來自SQLite db的未知結果數

我有一個應用程序,它允許用戶登錄並根據他在db中的ID,顯示他保存的筆記。對於這個觀點我有這部分代碼:

title = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); 
MyDbHandler dbh = new MyDbHandler(this); 

for(int i = 0; i < 999; i++) { 
    content = dbh.getNoteTitle(id, i); //getNoteTitle(int, int) returns String 
    if(content != null && content != "0") 
     title.add(content); 
    else 
     break; 
} 
list.setAdapter(title); 

正如我所說的,到目前爲止是這種情況。 事情是 - 我非常不滿意使用'break; '在這裏,正如我在教育期間學到的,這不應該被使用。 有沒有更平滑的方法來解決這個問題?

另外'content!='0''應該是'! content.equals(「0」)'通常,對嗎?但是那個不行,那麼......爲什麼是這樣呢?

回答

1

我不確定你想要做什麼。首先,你應該對Strings使用「equal」方法。條件「content!=」0「將始終爲真,因爲您正在比較2個不同的對象。 content.equals(「0」)應該在大多數情況下返回true(當該值不是「0」時),並且可能應該使用調試器來查看內容的準確值。

如果您要採取從數據庫中的所有筆記,拿給你應該在SQLiteOpenHelper類似於第一種方法的用戶(它是沒有效率詢問每個項目的數據庫,以及關注點分離):

public ArrayList<String> getNotesList (int userID){ 
    SQLiteDatabase db = getWritableDatabase(); 
    Cursor c = db.query(TABLE_NAME, new String[] {MyDbHandler.COLUMN_NOTE_TITLE}, MyDbHandler.userID + "=" + userID,null, null, null, null); 
    ArrayList<String> list = null; 
     String noteTitle; 
     if (c != null && c.moveToFirst()) 
     { 
        list = new ArrayList<String>(c.getCount()); 
      for (int i = 0; i < c.getCount(); i++) 
      { 
       noteTitle = c.getString(c.getColumnIndex(MyDbHandler.COLUMN_SESSION_PATH)); 
       list.add(noteTitle); 
       c.moveToNext(); 
      } 
     } 
     c.close(); 
     db.close(); 
     return list; 

我認爲你不應該保存你不想使用的筆記(例如null或「0」),所以不要在這裏檢查,而是檢查addNote方法。 對於列表初始化,你有:

MyDbHandler dbh = new MyDbHandler(this); 
ArrayList listData = dbh.getNotesList(id) 
if (listData != null && listData.length != 0){ 
    title = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list); 
    listData.setAdapter(title); 
} 

我沒有測試代碼,但我希望它可以幫助你。祝你好運!

+0

謝謝! 基本上,這是使用這兩個(簡單)的想法,我缺乏。其餘的都來自它自己。 /// list = new ArrayList (c.getCount()); /// for(int i = 0; i