onReceive广播上的intent.getParcelableArrayListExtra返回具有空值的列表android

时间:2019-02-02 23:22:53

标签: android arraylist broadcast intentservice

我有IntentService,它从网络中获取(在许多迭代中)详细信息(例如飞行详细信息),然后从该数据中创建对象(可分析的)并将对象存储在ArrayList中。当没有更多数据可提取时,服务将停止。

在每次迭代中,我都会将Arraylist(通过BroadCast 发送),将到目前为止已获取的数据发送到Activity(在主线程上运行),以显示到目前为止已获取的数据。当我准备ArrayList(在服务处)并用飞行对象填充它时,一切都很好(可以说我已经用17个FlightObjects填充了它),但是在 OnReceive 中广播的方法(在主线程中 ),当试图使数组脱离意图时,会发生损坏数组的情况,导致无法获取数组列表,该列表的大小为17,第一个对象的确是FlightOject,,但其余对象为空

这是服务上用于发送广播的代码

private void sendMyBroacast(ArrayList<SkyScannerFlightObj> skyScannerFlights) {

    try{
        //sending back the arrayList to the main thread
        Intent broadCastIntent=new Intent();
        broadCastIntent.setAction(SearchFlights.BROADCAST_ACTION);
        broadCastIntent.putParcelableArrayListExtra("flightsArr", skyScannerFlights);
        sendBroadcast(broadCastIntent);
    }
    catch (Exception ex) {

    }
}

这就是数组在服务上调试的外观:

enter image description here

这是主界面上用于接收意图的代码:

   public void onReceive(Context context, Intent intent) {

    try {
        Bundle extras = intent.getExtras();
        ArrayList<SkyScannerFlightObj> skyScannerFlights =extras.getParcelableArrayList("flightsArr");
        searchFlightAct.displaySkyScannerFlights(skyScannerFlights);

    }
    catch (Exception ex) {
        ex.printStackTrace();
    }
}

这就是数组在主线程上调试的外观:

enter image description here

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我的问题是Parcelable对象中的write函数。我在这里评论了两行,而忘记了对这些行的注释。 取消注释这些行后,意图中的getArralylistExtra会按预期工作