二层爬虫程序数据获取问题?

比如我定义了一个实体类,如下
MessageItem{
string title;
string image Url;
……
}
省略号为get和set方法。

现在我用开启了一个线程请求网页数据,可是这个网页只有标题,和内容链接。我在这个线程返回的数据中setTitle()的值,可是面对后面链接我又得开一个线程来获取图片链接,可是当我在第二个线程中这样做的时候,数据已经返回了,即使获得了图片链接,也没有存储到我在第一个线程中创建的实体类中。我在第一个线程中执行玩后调用第二个线程才返回实体类,可是没等返回第二数据设置,数据就已经返回了。可能不好理解,我配上代码。

假如我用的某个网络请求类为okHttp

okHttp.get(url,new CallBack(){
public void success(string response){
MessageItem item =new MessageItem()
......
上面一段解析获得了,文章标题,和文章内容链接。
item.setTitle(title);
因为获取的是文章链接不是图片链接我这个时候又开了一个异步
okHttp.get(contentUrl,new CallBack(){
public void success(string response{
这里解析后我获得了图片链接于是我设置
item.setImageUrl(imageUrl)imageUrl;
}
});
return item ;
}
});

假如上面的代码包裹在一个方法中,返回实体类数据,并设置到Android界面,可是第二个异步还没执行完,第一个异步获取的结果就已经返回了,我设置到界面的图片链接就为空。

我知道异步不阻塞UI怎么保证第二个异步中的数据设置到MessageItem中在返回呢?

1个回答

可以利用handler来进行这种异步的操作

liyuanjinglyj
李元静 回复huangf321123: 我知道用handle来接收线程的消息,我问的是线程中返回后,我在开线程怎么保证数据同步。 通俗的讲就是异步中的异步怎么保证第二个异步数据返回才返回第一个异步的数据。
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问