我有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) {
}
}
这就是数组在服务上调试的外观:
这是主界面上用于接收意图的代码:
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();
}
}
这就是数组在主线程上调试的外观:
感谢您的帮助!
答案 0 :(得分:0)
我的问题是Parcelable对象中的write函数。我在这里评论了两行,而忘记了对这些行的注释。 取消注释这些行后,意图中的getArralylistExtra会按预期工作