如何通过活动发送ArrayList<CustomClass>()
How to send ArrayList<CustomClass>() through activities
我有这个class:
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];
}
};
...
}
我试着把它打包成一个包,然后一个intent。但我什至无法在同一个 activity 中检索它(它在另一个 activity 中抛出 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,因为它会填充到当前 activity(带有进度条)。
你做错的是你把 ParcelableArrayList 放在一个 bundle 中,把 bundle 放在 intent extras 中(它本身就是一个 bundle),然后试图直接从 intent 访问 ParcelableArrayList演员。
你应该像这样将 ParcelableArrayList 直接放在 Intent 的 extras 中:
intent.putParcelableArrayListExtra("FlightDataList", (ArrayList<? extends Parcelable>) flightDataList)
并通过以下方式访问:
intent.getExtras().getParcelableArrayList("FlightDataList")
或
intent.getParcelableArrayListExtra("FlightDataList")
如果您想保留 "double bundle" 解决方案,即使我不建议这样做,您也应该以这种方式访问数据:
intent.getExtras().getBundleExtra("Bundle").getParcelableArrayList("FlightDataList")
有关在活动之间传递数据的更多信息,请查看 this
只需根据您的意图使用 putParcelableArrayListExtra
,不要使用 Bundle。
试试这个
Intent intent = new Intent(this, DatasheetActivity.class);
intent.putParcelableArrayListExtra("FlightDataList", flightDataList );
startActivity(intent);
其他activity
Intent intent = getIntent();
if (intent != null) {
List<FlightData> flightDataList;
flightDataList = intent.getParcelableArrayListExtra("FlightDataList");
}
我有这个class:
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];
}
};
...
}
我试着把它打包成一个包,然后一个intent。但我什至无法在同一个 activity 中检索它(它在另一个 activity 中抛出 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,因为它会填充到当前 activity(带有进度条)。
你做错的是你把 ParcelableArrayList 放在一个 bundle 中,把 bundle 放在 intent extras 中(它本身就是一个 bundle),然后试图直接从 intent 访问 ParcelableArrayList演员。
你应该像这样将 ParcelableArrayList 直接放在 Intent 的 extras 中:
intent.putParcelableArrayListExtra("FlightDataList", (ArrayList<? extends Parcelable>) flightDataList)
并通过以下方式访问:
intent.getExtras().getParcelableArrayList("FlightDataList")
或
intent.getParcelableArrayListExtra("FlightDataList")
如果您想保留 "double bundle" 解决方案,即使我不建议这样做,您也应该以这种方式访问数据:
intent.getExtras().getBundleExtra("Bundle").getParcelableArrayList("FlightDataList")
有关在活动之间传递数据的更多信息,请查看 this
只需根据您的意图使用 putParcelableArrayListExtra
,不要使用 Bundle。
试试这个
Intent intent = new Intent(this, DatasheetActivity.class);
intent.putParcelableArrayListExtra("FlightDataList", flightDataList );
startActivity(intent);
其他activity
Intent intent = getIntent();
if (intent != null) {
List<FlightData> flightDataList;
flightDataList = intent.getParcelableArrayListExtra("FlightDataList");
}