Android BroadcastReceiver onReceive NullReference

时间:2014-03-03 13:46:23

标签: android android-intent broadcastreceiver

我有一个Activity,当onStart方法触发时,它调用web服务来获取数据。此活动包含一些按钮,允许用户导航到不同的片段。

当检索到来自网络服务的数据时,它会启动BroadcastIntent

如果用户位于相关片段内,则会通过BroadcastReceiver捕获意图。在onReceieve函数中,我从网络服务数据中获取已缓存到static 的数据。

所以,这就是问题所在:

onReceieve函数中,当我尝试从静态类中获取数据时,它将数据显示为null。因此,当我尝试访问该数据的内部对象时,它会抛出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就不会发生。如果我立即进入片段,则会发生NRE。

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。 Data存在问题,与我构建所有内容的方式相反。