返回信息流代码如下:
public String getEnqueue(String url) throws IOException
{
Request request = new Request.Builder()
.url(url)
.addHeader("Authorization", "Basic " + byr_bbs_api.getAuth())
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback()
{
@Override
public void onFailure(Request request, IOException e)
{
e.printStackTrace();
}
@Override
public void onResponse(Response response) throws IOException
{
response_result = response.body().string();
}
});
return response_result;
}
我如果在 return response_result; 这句话添加断点,停下来的时候发现 response_result 返回的是有意义的值。但是如果我把断点去掉,那么在调用该方法的地方得到的返回值就是空的,这是为什么?
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #28190同步于 2016/1/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖
添加断点可以运行,去掉断点即出错。
FuckUSA
2016/1/10镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
new Callback(){}代码是在网络访问返回后执行的。打断点的话,程序暂停的工夫,网络访问已经成功,得到了返回值;但是直接运行的话,response_result 还没有拿到返回值,所以是空的。
这样写
public void getEnqueue(String url) throws IOException
{
Request request = new Request.Builder()
.url(url)
.addHeader("Authorization", "Basic " + byr_bbs_api.getAuth())
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback()
{
@Override
public void onFailure(Request request, IOException e)
{
e.printStackTrace();
}
@Override
public void onResponse(Response response) throws IOException
{
response_result = response.body().string();
onPostEnqueue(response_result);
}
});
}
private void onPostEnqueue(String result) {
//TODO:
}
这样的话这两个方法都是void,那我如何在原来我调用 getEnqueue 方法的地方获取我想要的 String类型的网络返回值呢?
【 在 sollian 的大作中提到: 】
: 这样写
: public void getEnqueue(String url) throws IOException
: {
: ...................
把原来的逻辑写到onPostEnqueue函数不就行了吗
【 在 FuckUSA 的大作中提到: 】
: 这样的话这两个方法都是void,那我如何在原来我调用 getEnqueue 方法的地方获取我想要的 String类型的网络返回值呢?
额,感觉逻辑有点混乱,是不是可以在 onPostEnqueue 中 通过 Handler 向主进程发送数据,这样在网络获取到反馈之后就可以立马更新UI???我是新手,麻烦你啦!
【 在 sollian 的大作中提到: 】
: 把原来的逻辑写到onPostEnqueue函数不就行了吗
可以呀。不过onPostEnqueue如果是在主线程执行的话,就不需要再用handler了。直接刷新UI就行了。
【 在 FuckUSA 的大作中提到: 】
: 额,感觉逻辑有点混乱,是不是可以在 onPostEnqueue 中 通过 Handler 向主进程发送数据,这样在网络获取到反馈之后就可以立马更新UI???我是新手,麻烦你啦!