在这里先向大家问候。
在寻找解决方案的过程中,我一直在问题和疯狂之间徘徊,我已经投入了更多的时间来解决自己的困境,现在我需要在该领域最知识渊博的人来帮助我。
正如我在下面详细介绍的,我正在做或至少试图做的是更新RecyclerView
,同时我正在收集保存在DB
和{{ 1}}。
我要在list of elements
中绘制的数据,是通过以下方式获得的:使用RecyclerView
,我首先获得一个链接列表,然后使用rssparser
,我得到新闻的图片和文字。
碰巧,必须在Jsoup
内部调用这些与网络交互的函数,而不是UI的那些函数,很好,我相信我在那里创建的就像多线程一样,并且很好我可以在异步任务中完成这种数据获取。
我需要做的另一件事是维持此视图中的threads
,直到线程处理完成为止。理想情况下,它可以实时工作,我已经做到了,但是对我来说不行,方法是将每个新元素添加到列表中,然后将新插入的项目通知适配器。
当任务处理结束并且线程完成其工作时,我也不用progress bubble
更新RecyclerView
,我也不知道还有什么尝试,也许我有一些算法错误。
下面我要放我的代码,对我的足迹表示歉意,请确保我留下了一些不必要的代码或注释。
片段:
adapter.notifyDatasetChanged()
答案 0 :(得分:1)
您不是在onPostExecute()
方法中不是 更新任何适配器数据并调用notifyDatasetChanged
@Override
protected void onPostExecute(String result) {
adapter.notifyDataSetChanged();
isAlreadyRefresh = true;
swipeView.setRefreshing(false);
}
在更新适配器数据时,您只需<{>} 呼叫adapter.notifyDatasetChanged()
。
我看到您已通过onRefresh()
方法更新了适配器数据,但尚未调用adapter.notifyDatasetChanged()
。因此,您需要添加 notifyDatasetChanged ,如下面的代码所示。
@Override
public void onRefresh() {
if (!isAlreadyRefresh) {
swipeView.setRefreshing(true);
swipeView.postDelayed(new Runnable() {
@Override
public void run() {
fetchNews();
isAlreadyRefresh = true;
adapter.setmValues(news);
adapter.notifyDatasetChanged() // <- Add this
}
}, 1000);
} else
swipeView.setRefreshing(false);
}
这可能是您的RecyclerView
未更新的原因之一
答案 1 :(得分:1)
除了adityakamble49的答案。该问题可能位于GoScrapp函数内部:
if(!esta) {
Foo foo = new Foo(article);
Thread th = new Thread(foo);
try {
th.start();
} catch (Exception e) {
e.printStackTrace();
}
}
您正在doInBackground()内部启动一个新线程来处理数据并更新数据库,因此在线程将数据插入数据库之前执行onPostExecute()。