Android - 将值从 sqlite 数据库加载到数组列表

Posted

技术标签:

【中文标题】Android - 将值从 sqlite 数据库加载到数组列表【英文标题】:Android - load values from sqlite database to an arraylist 【发布时间】:2011-07-25 20:10:58 【问题描述】:

我是安卓新手。我有一个使用 SQLite DB 的应用程序。 我需要将值从数据库推送到对象类型的数组列表。 我使用的代码在这里给出。

 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 objectList

请帮助我..提前谢谢..

【问题讨论】:

创建数据库管理器实例时“this”满足什么参数?构造函数是什么样的? 【参考方案1】:

试试这个:

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;

【讨论】:

当我从我的代码中删除 db.close() 并包含 c.close() 时,它起作用了。但我认为 db.open() 和 db.close() 是必要的。但现在的问题是,logcat..WARN/SQLiteCompiledSql(10839): Releasing statement in a finalizer 中显示了一些错误和警告语句。请确保您在游标上显式调用 close():WARN/SQLiteCompiledSql(10839): android.database.sqlite.DatabaseObjectNotClosedException: 应用程序没有关闭游标或在此处打开的数据库对象 .close() 从未显式调用数据库。还有一些数据库错误也显示 添加 db.close();在 c.close(); 之后 感谢 runor49 的帮助。您的帮助真的很可观,+1 对您的帮助。你能在给定的链接上帮我解决这个问题吗..***.com/questions/7848915/…【参考方案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();

【讨论】:

【参考方案3】:

您的查询可能是空白,moveToFirst 返回 false。

if 语句之前记录c.getCount() 的值怎么样?

【讨论】:

那么你的代码应该可以工作了。这是您使用的实际代码吗? 谢谢 Matthew Willis。我的实际代码与我在此处发布的代码相似。 可能实际代码和您发布的代码之间的差异是错误所在。

以上是关于Android - 将值从 sqlite 数据库加载到数组列表的主要内容,如果未能解决你的问题,请参考以下文章

如何将值从基本适配器传递到 Android 中的 Activity

如何将值从活动传递到 Android Studio 中的类?

将值从回收器适配器传递到android中的片段

如何将值从动态列表视图传递到活动?

如何将值从服务传输到活动?

如何仅在创建时将值插入数据库?(SQLite Android Studio)