开发者社区 问答 正文

如何通过活动发送ArrayList <CustomClass>()

我有这个课:

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,因为它被填充在当前活动中(带有进度条)。

展开
收起
被纵养的懒猫 2019-10-08 17:23:58 335 分享 版权
阿里云 AI 助理回答

从你提供的代码片段来看,你已经正确实现了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中按照上述方式接收数据,并检查日志以确认数据是否成功传递。如果问题仍然存在,请检查是否有其他代码逻辑影响了数据的填充或传递过程。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: