我有这个课:
public class FlightData implements Parcelable { private double x; private double y; private double time;
FlightData(double x, double y, double time){
this.x = x;
this.y = y;
this.time = time;
}
private FlightData(Parcel in) {
x = in.readDouble();
y = in.readDouble();
time = in.readDouble();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeDouble(x);
dest.writeDouble(y);
dest.writeDouble(time);
}
public static final Creator<FlightData> CREATOR = new Creator<FlightData>() {
@Override
public FlightData createFromParcel(Parcel in) {
return new FlightData(in);
}
@Override
public FlightData[] newArray(int size) {
return new FlightData[size];
}
};
...
} 我尝试将其打包,然后是意图。但是我什至无法在同一个活动中检索它(它在另一个活动中抛出null,所以我也尝试在当前活动中获取它-null):
List<FlightData> flightDataList = new ArrayList<>();
//... arraylist gets filled in
intent = new Intent(this, DatasheetActivity.class);
bundle = new Bundle();
bundle.putParcelableArrayList("FlightDataList", (ArrayList<? extends Parcelable>) flightDataList);
intent.putExtra("Bundle", bundle);
Log.d("ErrorCustom",Integer.toString(flightDataList.size()));
//Log.d("ErrorCustom",Integer.toString(intent.getExtras().getParcelableArrayList("FlightDataList").size())); //throws null error
startActivity(intent);
我确实想发送ArrayList,因为它被填充在当前活动中(带有进度条)。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从你提供的代码片段来看,你已经正确实现了FlightData
类作为Parcelable
,并且尝试通过Intent将一个包含FlightData
对象的ArrayList从一个Activity传递到另一个Activity。但是,在尝试读取传递的数据时遇到了问题。
首先,确保在目标Activity(即DatasheetActivity
)中正确接收和处理传入的Intent和Bundle。你应该在onCreate()
或适当的生命周期方法中这样做:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_datasheet);
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
if (bundle != null) {
ArrayList<FlightData> flightDataList = bundle.getParcelableArrayList("FlightDataList");
if (flightDataList != null) {
// 数据成功接收,可以在这里使用flightDataList
Log.d("ReceivedData", Integer.toString(flightDataList.size()));
} else {
// 数据为null,处理错误情况
Log.e("ErrorReceiving", "flightDataList is null");
}
} else {
// Bundle为null,处理错误情况
Log.e("ErrorReceiving", "Bundle is null");
}
}
回到你的发送方代码,实际上你不需要将Bundle再放入Intent的extra中,直接放置ArrayList即可。因此,简化你的意图创建和数据传递代码如下:
List<FlightData> flightDataList = new ArrayList<>();
//... arraylist gets filled in
Intent intent = new Intent(this, DatasheetActivity.class);
intent.putParcelableArrayListExtra("FlightDataList", flightDataList);
Log.d("ErrorCustom", Integer.toString(flightDataList.size()));
startActivity(intent);
这样修改后,你直接通过Intent传递ArrayList,而无需额外包装到Bundle中。请确保在目标Activity中按照上述方式接收数据,并检查日志以确认数据是否成功传递。如果问题仍然存在,请检查是否有其他代码逻辑影响了数据的填充或传递过程。