gpt4 book ai didi

Android错误重新打开一个已经关闭的对象

转载 作者:行者123 更新时间:2023-11-29 17:49:48 25 4
gpt4 key购买 nike

我想从数据库中加载一些数据,但我遇到了一个我不明白的问题。

我的功能:

public List<News> getNews(){
db = this.getReadableDatabase();
List<News> tmp_list = new LinkedList<News>();

txtRequest = "SELECT * FROM myTable ";

Cursor c = db.rawQuery(txtRequest, null);

tmp_list = loadListNews(c);

return tmp_list;
}

之后,我调用函数“loadListNews”:

public List<News> loadListNews(Cursor c) {
List<News> tmp_list = new LinkedList<News>();
while(c.moveToNext()) {
tmp_list.add(loadOneNews(c));
}
return tmp_list;
}

最后,我调用这个函数来创建我的对象新闻:

public News loadOneNews(Cursor c1) {
c1.moveToFirst();
// i'm creating my object
c1.close();
return tmpNews;
}

然后,我遇到错误“重新打开已关闭的对象时出错”。

最佳答案

您将在 while 循环的第一次通过后关闭光标。

此外,您总是移动到 SQL 结果的第一个元素,因此可能只读取第一个元素并创建一个无限循环。幸运的是你有一个 close 来停止你的循环 ;)

您可以进行以下小改动以对其进行一些改进:

public List<News> loadListNews(Cursor c) {
List<News> tmp_list = new LinkedList<News>();
c.moveToFirst()
while(c.moveToNext()) {
tmp_list.add(loadOneNews(c));
}
c.close()
return tmp_list;
}

public News loadOneNews(Cursor c1) {

// i'm creating my object

return tmpNews;
}

关于Android错误重新打开一个已经关闭的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23745372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com