【发布时间】:2015-08-12 15:27:12
【问题描述】:
我试图在网络调用完成后调用一个方法。我已经尝试为此使用 LocalBroadcastManager 。我最初让它在网络调用完成后发送广播,效果很好,直到我有 多个方法等待同一个意图,开始导致问题。
是否有更好的解决方案或者这是最好的方法?如果是,您能否指出我可以深入学习如何使用它或解释它的使用方式的地方?
抱歉,我忘了提及我正在使用 Volley Library 进行网络调用?
谢谢
【问题讨论】:
我试图在网络调用完成后调用一个方法。我已经尝试为此使用 LocalBroadcastManager 。我最初让它在网络调用完成后发送广播,效果很好,直到我有 多个方法等待同一个意图,开始导致问题。
是否有更好的解决方案或者这是最好的方法?如果是,您能否指出我可以深入学习如何使用它或解释它的使用方式的地方?
抱歉,我忘了提及我正在使用 Volley Library 进行网络调用?
谢谢
【问题讨论】:
您使用 BroadcastManager 肯定是因为 android 慢循环它在某个时候多次调用接收方法。你可以找到同样的问题here。
你需要做的是只是为了防止多次调用方法所以使用上面的链接来提示你的问题,提示是采取标志和处理程序来防止多次打电话。
【讨论】:
您应该使用回调来等待网络任务完成。 基本思想与 onClickListener 相同。您传递一个接口实现,一旦调用回调,它将执行您想要的任务。 应该是这样的:
public interface OnComplete {
void onComplete();
void onError(String errorMsg);
}
当你调用你的网络东西时,你应该传递一个这样的实现:
NetworkManager.callServer("serverurl", new OnComplete() {
@Overwrite
void onComplete() {
//Do your stuff here
}
@Overwrite
void onError(String errorMsg){
}
}
你从NetworkManager调用它:
//from the AsyncTask when you done with the network stuff
onComplete.onComplete();
如果您必须等待多个呼叫,您可以使用CyclicBarrier:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CyclicBarrier.html
【讨论】: