首页 文章

从BroadcastReceiver中的Service获取arraylist会产生NullpointerException

提问于
浏览
0

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");

日志异常:

FATAL EXCEPTION:main java.lang.RuntimeException:在com.prematix.tollsystem.avcc.AvccActivity$ArrayListReceiver@42003268的android.app.LoadedApk $ ReceiverDispatcher $ Args.run中接收广播Intent 时出错LoadedApk.java:798)android.os.Handler.handleCallback(Handler.java:800)android.os.Handler.dispatchMessage(Handler.java:100)android.os.Looper.loop(Looper.java:194) )在com.的java.lang.reflect.Method.invoke(Method.java:525)的java.lang.reflect.Method.invokeNative(Native Method)的android.app.ActivityThread.main(ActivityThread.java:5391)上 . android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:833)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)at dalvik.system.NativeStart.main(Native Method)引起by:java.lang.NullPointerException at com.prematix.tollsystem.avcc.AvccActivity $ ArrayListReceiver.onReceive(AvccActivity.java:271)at android.app.LoadedApk $ ReceiverDispatcher $ Args.run(LoadedApk.java:788)at android . 口.Handler.handleCallback(Handler.java:800)位于android.app.AtoT.Thread.main的android.os.Handler.dispatchMessage(Handler.java:100)android.os.Looper.loop(Looper.java:194) ActivityThread.java:5391)在java.lang.reflect.Method.invoke的java.lang.reflect.Method.invokeNative(Native Method)中(Method.java:525)

1 回答

  • 0

    获取 Intent 的方法不正确 . 我相信你的 BroadcastReceiver 在一个活动类中,因为你正在调用 getIntent() . 但是, getIntent() 将为您提供 Intent 提供给活动而不是接收者 . Intent for receiver 提供给方法 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);
    }
    

相关问题