从 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()
将为您提供提供给活动而不是接收者的Intent
。 receiver
的 Intent
提供给方法 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的主要内容,如果未能解决你的问题,请参考以下文章
使用kotlin从android中的BroadcastReceiver类访问edittext
MainActivity中的BroadcastReceiver不接收广播意图