李元静 2015-12-01 07:04 采纳率: 91.7%
浏览 1302
已采纳

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

比如我定义了一个实体类,如下
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条回答 默认 最新

  • keyborad_boy 2015-12-01 09:29
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog