2011-03-30 27 views
6

我是新來的android。我有一個使用SQLite數據庫的應用程序。 我需要將數據庫中的值推送到對象類型的數組列表中。 我使用的代碼在這裏給出。Android的 - 從sqlite數據庫加載值到arraylist

private ArrayList<objectname> objectList = new ArrayList<objectname>(); 
//function used to get values from database 
    public ArrayList<objectname> getResults() { 

    MyDb db = new MyDb(this); //my database helper file 
    db.open(); 
    Cursor c = db.getAllValues(); //function to retrieve all values from a table- written in MyDb.java file 
    if (c.moveToFirst()) 
    { 
     do {   
      String date = c.getString(c.getColumnIndex("date")); 

      try 
      { 
       ob = new objectname(); 
       ob.setDate(c.getString(c.getColumnIndex("date")));// setDate function is written in Class file 
       objectList.add(ob); 
      } 
      catch (Exception e) { 
      Log.e(MY_DEBUG_TAG, "Error " + e.toString()); 
      } 

     } while (c.moveToNext()); 
    } 
     db.close(); 
     return objectList; 
} 

這不能正常工作。未顯示任何錯誤,但我沒有到ArrayList鏈表類

請幫助me..Thanks提前獲得價值..

+0

什麼參數呢「這個」在創建您的數據庫管理器實例時滿足嗎?構造函數是什麼樣的? – AlleyOOP 2013-12-31 20:02:54

回答

7

試試這個:

private ArrayList<objectname> objectList = getResults(); 

private ArrayList<objectname> getResults() { 

    MyDb db = new MyDb(this); //my database helper file 
    db.open(); 

    ArrayList<objectname> resultList = new ArrayList<objectname>(); 


    Cursor c = db.getAllValues(); //function to retrieve all values from a table- written in MyDb.java file 
    while (c.moveToNext()) 
    { 
     String date = c.getString(c.getColumnIndex("date")); 

     try 
     { 
      ob = new objectname(); 
      ob.setDate(date);// setDate function is written in Class file 
      resultList.add(ob); 
     } 
     catch (Exception e) { 
      Log.e(MY_DEBUG_TAG, "Error " + e.toString()); 
     } 

    } 

    c.close(); 

    db.close(); 
    return resultList; 
} 
+0

感謝runor49。我試過但不適合我 – 2011-03-30 09:59:40

+0

什麼是不工作?沒有記錄填充? – runor49 2011-03-30 16:53:36

+0

它的工作,當我從我的代碼中刪除db.close()幷包含c.close()。但我認爲db.open()和db.close()是必需的。但現在的問題是,logcat..WARN/SQLiteCompiledSql(10839)中顯示了一些錯誤和警告語句:在終結器中釋放語句。請確保您明確地在您的遊標上調用close():WARN/SQLiteCompiledSql(10839):android.database.sqlite.DatabaseObjectNotClosedException:應用程序未關閉在此處打開的遊標或數據庫對象.close()從未顯式調用過數據庫。還有一些數據庫錯誤也顯示 – 2011-03-31 07:02:15

1

可能是你查詢一片空白和moveToFirst是返回false。

如何在if聲明之前記錄c.getCount()的值?

+0

記錄c.getCount()時正確顯示的行數。 – 2011-03-30 06:06:11

+1

然後你的代碼應該可以工作。這是你使用的實際代碼嗎? – 2011-03-30 06:09:56

+0

謝謝馬修威利斯。我的實際代碼看起來和我在這裏發佈的代碼很相似。 – 2011-03-30 09:49:20

2

我有一個類似的問題用遊標從數據庫中檢索值,並在屏幕上顯示..下面的解決方案適用於我..

  Cursor cur = db.getAllValues(); 
      int index = c.getColumnIndex("date"); 
    cur.moveToFirst(); 

    while (cur.isAfterLast() == false) { 
     System.out.println(cur.getString(index)); // For debug purposes 
     String date = cur.getString(index); 
     try { 
      ob = new objectname(); 
      ob.setDate(date); 
      resultList.add(ob); 
     } catch (Exception e) { 
      Log.e(MY_DEBUG_TAG, "Error " + e.toString()); 
     } 
     cur.moveToNext(); 
    } 
    cur.close(); 
+0

感謝金星。我也試過這個,但沒有工作。 – 2011-03-30 10:00:42

相關問題