Как отправить ArrayList <CustomClass>() через действия - PullRequest
1 голос
/ 08 октября 2019

У меня есть этот класс:

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];
        }
    };

    ...
}

Я пытаюсь поместить его в связку, затем намерение. Но я даже не могу получить его в том же упражнении (в другом упражнении он выбрасывает ноль, поэтому я пытался получить его в текущем - тоже ноль):

        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, потому что он заполняется текущей активностью (с индикатором выполнения).

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Просто используйте putParcelableArrayListExtra с вашим намерением и не используйте Bundle.

Попробуйте это

Intent intent = new Intent(this, DatasheetActivity.class);
intent.putParcelableArrayListExtra("FlightDataList", flightDataList );
startActivity(intent);

В другой деятельности

Intent intent = getIntent();
    if (intent != null) {
        List<FlightData> flightDataList;
        flightDataList = intent.getParcelableArrayListExtra("FlightDataList");
}
1 голос
/ 08 октября 2019

То, что вы делаете неправильно, заключается в том, что вы помещаете ParcelableArrayList в пакет, помещаете пакет в дополнительные функции (то есть в отдельный пакет), а затем пытаетесь получить доступ к ParcelableArrayList прямо из дополнительных функций.

Вы должны поместить ParcelableArrayList прямо в дополнительные функции Intent, как это:

intent.putParcelableArrayListExtra("FlightDataList", (ArrayList<? extends Parcelable>) flightDataList)

И получить к нему доступ через:

intent.getExtras().getParcelableArrayList("FlightDataList")

или

intent.getParcelableArrayListExtra("FlightDataList")

Если вы хотите сохранить решение «двойной связки», даже если я не буду его предлагать, вы должны получить доступ к данным следующим образом:

intent.getExtras().getBundleExtra("Bundle").getParcelableArrayList("FlightDataList")

Для получения дополнительной информации о передаче данных между проверками действий это

...