【发布时间】:2014-03-03 13:46:23
【问题描述】:
我有一个 Activity,当 onStart 方法触发时,它会调用 Web 服务来获取数据。此活动包含一些按钮,允许用户导航到不同的片段。
当从 web 服务检索数据时,它会启动 BroadcastIntent。
如果用户在相关的 Fragment 中,它会通过 BroadcastReceiver 捕获意图。在onReceieve 函数中,我正在获取已缓存到static 类来自 网络服务数据的数据。
所以,这就是问题所在:
在onReceieve 函数中,当我尝试从静态类中获取数据时,它会将数据显示为空。因此,当我尝试访问该数据的内部对象时,它会抛出 NullReference。
它不会显示 NullReference 的唯一时间是在 Activity 屏幕上,如果我等待 10-15 秒,让数据返回并填充静态类中的对象。
这种方法仍然与立即启动片段相同。我有一个回调函数,它在从 Web 服务接收到数据时触发。这个函数总是在 onReceieve 之前调用。那么为什么静态类中的数据显示为null,我不知道......
希望我对问题的描述是连贯的。如果没有,请告诉我。
代码:
这段代码将数据保存到静态类(并且总是在BroadcastReceiver的onReceive之前调用)。
for (int i = 0; i < myResult.getResource().getCategories().size(); i++) {
......
MyModel.cachedResult.put(tempOfferType, category);
}
在此之后,我立即启动BroadcastIntent:
Intent broadcastIntent = new Intent(MyFragment.ACTION_REQUEST_RESULT);
this.getApplicationContext().sendBroadcast(broadcastIntent);
onReceive 函数:
public void onReceive(Context context, Intent intent) {
...
// Line below throws NRE because offers is null
adapter = new OfferAdapter(getActivity(), 0, offers.toArray(new SinglePlusOfferVO[0]));
...
}
同样,如果我在主 Activity 上等待 10-15 秒,则不会发生 NRE。如果我立即进入 Fragment,则会发生 NRE。
【问题讨论】:
标签: android android-intent broadcastreceiver