【问题标题】:Android BroadcastReceiver onReceive NullReferenceAndroid BroadcastReceiver onReceive NullReference
【发布时间】: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


    【解决方案1】:

    我已经解决了这个问题。 Data 有一个问题,与我构建一切的方式相反。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-17
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      相关资源
      最近更新 更多