在一个方法中一个值需要网络操作才能拿到,但是网络操作没完成就执行到return,导致返回出来拿到的是null值,这种情况怎么解决啊?
比如以下情况
public Map getData(){
//网络操作
x.http().get(requestParams, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
map.put("data",data);
}
}
return map;
}
死循环轮询直到检测到操作完成。
不要用这种方式啊,用接口回掉不是很好嘛
用接口调用方式把,网络请求本来就是异步的,你这样返回肯定是空的。
用锁,在http的get函数调用后,return之前休眠,再onSuccess函数里唤醒这个锁,继续执行return map就可以了
大概下面这个样子
synchronized (mActionDoneSync) {
//网络操作
x.http().get(requestParams, new Callback.CommonCallback() {
@Override
public void onSuccess(String result) {
mActionDoneSync.notifyAll();
map.put("data",data);
}
}
mActionDoneSync.wait(delay);
return map;
}
用网络请求框架完美解决,换个方式