Android 带回调函数的网络请求,如何处理排队请求的结果

Android 带回调函数的网络请求,如何处理排队请求的结果,android,queue,offline,android-volley,Android,Queue,Offline,Android Volley,使用Volley或其他网络库,可能需要将网络请求添加到队列中,以便稍后发送请求 将这些对象发送到队列的问题在于,当对象确实被发送时,似乎没有明显的方法来处理服务器返回的网络调用的结果,因为这发生在对象的嵌套回调函数中 我的网络请求通常是在线的,并且是我的活动、片段和服务的一部分,响应使用并设置在这些活动、片段和服务的其他部分中声明的变量。有时会改变UI线程中的可视元素 如果这些请求排队,并且当网络连接更加有利时,这个队列将被清空,那么我似乎没有一种直观的方法来访问回调方法 有解决办法吗?也许有人

使用Volley或其他网络库,可能需要将网络请求添加到队列中,以便稍后发送请求

将这些对象发送到队列的问题在于,当对象确实被发送时,似乎没有明显的方法来处理服务器返回的网络调用的结果,因为这发生在对象的嵌套回调函数中

我的网络请求通常是在线的,并且是我的活动、片段和服务的一部分,响应使用并设置在这些活动、片段和服务的其他部分中声明的变量。有时会改变UI线程中的可视元素

如果这些请求排队,并且当网络连接更加有利时,这个队列将被清空,那么我似乎没有一种直观的方法来访问回调方法

有解决办法吗?也许有人使用回调方法中的一组广播接收器或其他事件总线抽象出了这种设计范例

谢谢你的洞察力

我的网络请求通常是在线的,并且是我的活动、片段和服务的一部分,响应使用并设置在这些活动、片段和服务的其他部分中声明的变量。有时会改变UI线程中的可视元素

那不是个好主意。特别是,当您的请求挂起在工作队列中时,活动和片段可能已被销毁。至少,您要防止活动和片段被垃圾收集。更糟糕的是,您的结果可能会转到错误的UI组件(例如,活动被销毁并重新创建,因此结果应该转到新的活动实例,但您将请求绑定到旧的活动实例)

有解决办法吗


我会使用事件总线,特别是greenrobot的事件总线来实现线程灵活性。使用
服务
管理您的工作队列,当队列清空时关闭。单个操作在工作完成时引发事件。当这些事件相关时(例如,当活动/片段位于前台时),对这些事件感兴趣的事物会注册和注销以接收它们。通过这种方式,工作(网络I/O)与处理工作结果(例如,更新UI)更加分离。

我一直在看greenrobot的EventBus,你有使用它的例子吗?我正在使用Volley@CQM:加上我书中的教程(从T-12 IIRC开始)。谢谢,不过我还有一个与截击相关的问题。我想将我的请求对象存储在一个列表中,并在它们能够发布到网络时删除它们。这些对象中仍然有回调,我不知道如何让它们运行。其中一个回调是网络错误处理程序,我必须在其中添加请求对象或从列表中删除请求对象,但这会变成自引用,我的IDE甚至不喜欢这样。很好奇其他人是怎么做的Volley@CQM:对不起,我不使用截击,所以我没办法。