使用回调,但代码运行在错误的对象上

时间:2015-02-16 19:24:14

标签: java android asynchronous concurrency fragment

我已经实现了一个回调,用于运行异步(使用并发)HTTP调用(使用net),当它们完成时,它们调用在调用者中实现的完整回调,这是一个更新gui的片段。在调用完整例程的代码中,我将它包装在一个处理程序和循环器中(使用主循环器),因此完整的代码可以在主线程上运行,否则我得到线程异常b / c它不能更新GUI。除了以下内容外,其他所有内容似乎都运行正常,

我有一个活动,使用导航抽屉和主要区域中的片段,它们被替换。所有其他片段工作正常,在其中一个片段中我有一个视图寻呼机,其中包含更多可以刷过的片段。现在在寻呼机中使用了一个类,并且以两种不同的方式构造了在init上加载的第一个/第二个页面,我传递了不同的初始化信息,但它进行相同的异步调用并传递了#34;这个"所以调用知道使用回调来处理gui上的响应。但这些是两个单独的对象和页面,因此回调应该在正确的对象和页面上完成。一个viewpager在预先当前页面和下一页面中构建了两个对象,但奇怪的是只在第二页上调用(对于两者)回调并且正确地加载/插入第二页面,但是第一页面没有#t; t因为没有对它进行回调。

当我在第二个对象上调用回调调用代码时,永远不会是第一个。因此,两个异步调用都在第二个对象(第二个视图分页器页面)上运行,该对象尚未显示但可以刷到。这完全没有意义,在设置我使用的回调时#34;这个"所以它应该始终是对象的正确实例,我不知道第二页/对象如何获得所有回调...对象被创建,触发异步调用,传递& #34;这"用于回调并实现回调接口。

请不要使用android async的建议,我们不得不这样做的原因很多,而android文档甚至推荐并发出于各种原因。

我认为它与我使用的处理程序/循环代码有关,也许因为片段/视图寻呼机以及我是如何进行奇怪的事情在主线程代码上执行运行...否则我无法解释它,所以任何信息都会受到赞赏。我花了很长时间进行调试,无法理解可能出现的问题。

感谢。

1 个答案:

答案 0 :(得分:0)

删除了视图寻呼机,而是重新创建了通过代码手动提供的外观viewpager。通过使用片段(如代码的其余部分)并用每个新片段替换主容器,问题得以解决。也许片段碎片中的片段也不好......?

刷卡/外观我只是手动重新创建了一个视图寻呼机。