繁体   English   中英

从BroadcastReceiver中的Service获取arraylist会给出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()本身提供了用于receiverIntent 对您的代码进行以下更改:

添加更多:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM