Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-将值从sqlite数据库加载到arraylist_Android_Sqlite_Arraylist - Fatal编程技术网

Android-将值从sqlite数据库加载到arraylist

Android-将值从sqlite数据库加载到arraylist,android,sqlite,arraylist,Android,Sqlite,Arraylist,我是android新手。我有一个使用SQLite DB的应用程序。 我需要将值从数据库推送到object类型的arraylist。 这里给出了我使用的代码 private ArrayList<objectname> objectList = new ArrayList<objectname>(); //function used to get values from database public ArrayList<objectname> get

我是android新手。我有一个使用SQLite DB的应用程序。 我需要将值从数据库推送到object类型的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;
}
private ArrayList objectList=new ArrayList();
//用于从数据库获取值的函数
公共ArrayList getResults(){
MyDb=newmydb(this);//我的数据库帮助文件
db.open();
Cursor c=db.getAllValues();//函数,用于从表中检索所有值-以MyDb.java文件编写
if(c.moveToFirst())
{
做{
字符串日期=c.getString(c.getColumnIndex(“日期”);
尝试
{
ob=新对象名();
ob.setDate(c.getString(c.getColumnIndex(“日期”));//setDate函数写在类文件中
objectList.add(ob);
}
捕获(例外e){
Log.e(MY_DEBUG_标记,“Error”+e.toString());
}
}而(c.moveToNext());
}
db.close();
返回对象列表;
}
这工作不正常。没有显示任何错误,但我没有将值放入arraylist对象列表


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

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

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

尝试以下操作:

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;
}
private ArrayList objectList=getResults();
私有ArrayList getResults(){
MyDb=newmydb(this);//我的数据库帮助文件
db.open();
ArrayList resultList=新建ArrayList();
Cursor c=db.getAllValues();//函数,用于从表中检索所有值-以MyDb.java文件编写
while(c.moveToNext())
{
字符串日期=c.getString(c.getColumnIndex(“日期”);
尝试
{
ob=新对象名();
ob.setDate(date);//setDate函数写在类文件中
结果列表添加(ob);
}
捕获(例外e){
Log.e(MY_DEBUG_标记,“Error”+e.toString());
}
}
c、 close();
db.close();
返回结果列表;
}

我在使用光标从数据库中检索值并在屏幕上显示时遇到了类似的问题。。下面的解决方案适合我

            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();

那么你的代码应该可以工作了。这是您正在使用的实际代码吗?谢谢Matthew Willis。我的实际代码看起来与我在这里发布的代码相似。可能实际代码与您发布的代码之间的差异在于错误所在。当我从代码中删除db.close()并将c.close()包含在内时,它起到了作用。但是我认为db.open()和db.close()是必要的。但现在的问题是,一些错误和警告语句显示在logcat..WARN/SQLiteCompiledSql(10839):在终结器中释放语句中。请确保在游标上显式调用close():WARN/SQLiteCompiledSql(10839):android.database.sqlite.DatabaseObjectNotClosedException:应用程序未关闭此处打开的游标或数据库对象。从未对数据库显式调用close()。还有一些数据库错误也显示add db.close();在c.close()之后;感谢runor49的帮助。你的帮助真的很值得赞赏,感谢+1的帮助。你能在给定的链接上帮我解决这个问题吗。。创建DB manager实例时,“this”满足什么参数?构造函数是什么样子的?