2011-03-30 68 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