从 BroadcastReceiver 中的 Service 获取 arraylist 给出 NullpointerException

Posted

技术标签:

【中文标题】从 BroadcastReceiver 中的 Service 获取 arraylist 给出 NullpointerException【英文标题】:Getting arraylist from Service in BroadcastReceiver gives NullpointerException 【发布时间】:2017-02-24 15:30:37 【问题描述】:

我在Service 中有一个AsyncTask。我从AsyncTask 发送ArrayList 作为广播。

当我在onReceive() 中得到ArrayList 时,我得到一个NullpointerException

这就是我发送ArrayList的方式。

 transits_list = new ArrayList<Transit>();
 transits_list.add(trs);

Intent arrayListIntent = new Intent("arrayList");
Bundle extra = new Bundle();
extra.putSerializable("transArray", transits_list);
intent.putExtra("extra", extra);
sendBroadcast(arrayListIntent);

Transit 类实现了Serializable

接收ArrayList

@Override
    public void onReceive(Context context, Intent intent) 
        ArrayList<Transit> myList;

        Bundle extra = getIntent().getBundleExtra("extra");
        ArrayList<Transit> transArrayListFromBroadCast =     (ArrayList<Transit>) extra.getSerializable("transArray");
        System.out.print("transArrayListFromBroadCast "+transArrayListFromBroadCast);
    

我在这一行得到NullpointerException

ArrayList<Transit> transArrayListFromBroadCast =     (ArrayList<Transit>) extra.getSerializable("transArray");

日志中的异常:

致命异常:主要 java.lang.RuntimeException:在 com.prematix.tollsystem.avcc.AvccActivity$ArrayListReceiver@42003268 中接收广播 Intent act=arrayList flg=0x10 时出错 在 android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:798) 在 android.os.Handler.handleCallback(Handler.java:800) 在 android.os.Handler.dispatchMessage(Handler.java:100) 在 android.os.Looper.loop(Looper.java:194) 在 android.app.ActivityThread.main(ActivityThread.java:5391) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:525) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 在 dalvik.system.NativeStart.main(本机方法) 引起:java.lang.NullPointerException 在 com.prematix.tollsystem.avcc.AvccActivity$ArrayListReceiver.onReceive(AvccActivity.java:271) 在 android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:788) 在 android.os.Handler.handleCallback(Handler.java:800) 在 android.os.Handler.dispatchMessage(Handler.java:100) 在 android.os.Looper.loop(Looper.java:194) 在 android.app.ActivityThread.main(ActivityThread.java:5391) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:525)

【问题讨论】:

【参考方案1】:

您获取Intent 的方法不正确。我相信您的 BroadcastReceiver 正在参加活动课程,因为您正在致电 getIntent()。但是,getIntent() 将为您提供提供给活动而不是接收者的IntentreceiverIntent 提供给方法 onReceive() 本身。对您的代码进行以下更改:

添加额外的:

Intent arrayListIntent = new Intent("arrayList");
Bundle extra = new Bundle();
extra.putSerializable("transArray", transits_list);
intent.putExtra("extra", extra);
sendBroadcast(arrayListIntent);

获得额外奖励:

@Override 
public void onReceive(Context context, Intent intent) 
    ArrayList<Transit> myList;

    Bundle extra = intent.getBundleExtra("extra");
    ArrayList<Transit> transArrayListFromBroadCast = (ArrayList<Transit>) extra.getSerializable("transArray");
    // System.out.print("transArrayListFromBroadCast "+transArrayListFromBroadCast);
 

【讨论】:

谢谢。我会尽力让你知道

以上是关于从 BroadcastReceiver 中的 Service 获取 arraylist 给出 NullpointerException的主要内容,如果未能解决你的问题,请参考以下文章

BroadcastReceiver

使用kotlin从android中的BroadcastReceiver类访问edittext

BroadcastReceiver中的域事务处理不起作用

MainActivity中的BroadcastReceiver不接收广播意图

将 BroadcastReceiver 用于推送通知时不会被调用

android从broadcastreceiver刷新listview