【问题标题】:Getting arraylist from Service in BroadcastReceiver gives NullpointerException从 BroadcastReceiver 中的 Service 获取 arraylist 给出 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)

【问题讨论】:

    标签: java android nullpointerexception


    【解决方案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);
    } 
    

    【讨论】:

    • 谢谢。我会尽力让你知道
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多