![](/img/trans.png)
[英]Firebase retrieve stored ArrayList from DataSnapShot gives NullPointerException
[英]Getting arraylist from Service in BroadcastReceiver gives NullpointerException
我在Service
有一个AsyncTask
。 我发送了一个ArrayList
作为从AsyncTask
广播。
当我在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");
日志中的异常:
致命异常:main java.lang.RuntimeException:在com.prematix.tollsystem.avcc.AvccActivity$ArrayListReceiver@42003268在android.app.LoadedApk $ ReceiverDispatcher $ Args.run(LoadedApk中接收广播意图{act = arrayList flg = 0x10}时出错.java:798),位于android.os.Handler.handleCallback(Handler.java:800),位于android.os.Handler.dispatchMessage(Handler.java:100),位于android.os.Looper.loop(Looper.java:194)在com.android.java.lang.reflect.Method.invokeNative(本机方法)在android.app.ActivityThread.main(ActivityThread.java:5391)在com.android.java.lang.reflect.Method.invoke(Method.java:525) .internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:833)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)在dalvik.system.NativeStart.main(本机方法)引起:位于com.prematix.tollsystem.avcc.AvccActivity $ ArrayListReceiver.onReceive(AvccActivity.java:271)的android.app.LoadedApk $ ReceiverDispatcher $ Args.run(LoadedApk.java:788)的java.lang.NullPointerException 。H android.os.Handler.dispatchMessage(Handler.java:100)的android.os.Looper.loop(Looper.java:194)的android.app.ActivityThread.main(ActivityThread)的andler.handleCallback(Handler.java:800) .java:5391),位于java.lang.reflect.Method.invokeNative(本机方法),位于java.lang.reflect.Method.invoke(Method.java:525)
您获取Intent
方法不正确。 我相信您的BroadcastReceiver
处于活动类中,因为您正在调用getIntent()
。 但是, getIntent()
将使您获得提供给活动而不是接收者的Intent
。 方法onReceive()
本身提供了用于receiver
的Intent
。 对您的代码进行以下更改:
添加更多:
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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.