Android 通过Intent传递自定义对象列表

Android 通过Intent传递自定义对象列表,android,android-intent,serializable,Android,Android Intent,Serializable,我正在尝试制作一个从JSON获取数据的应用程序,并使用它在地图上显示一个位置。当列表直接加载到包含映射片段的活动中时,映射机制工作正常。现在,当尝试在另一个活动中加载列表,然后尝试通过意图发送列表时,我无法显示数据,我想这与意图有关 这是意图发送部分 if (data != null && !data.isEmpty()) { List<AirQuality> receivedData= (List<AirQuality>) data;

我正在尝试制作一个从JSON获取数据的应用程序,并使用它在地图上显示一个位置。当列表直接加载到包含映射片段的活动中时,映射机制工作正常。现在,当尝试在另一个活动中加载列表,然后尝试通过意图发送列表时,我无法显示数据,我想这与意图有关

这是意图发送部分

if (data != null && !data.isEmpty()) {
        List<AirQuality> receivedData= (List<AirQuality>) data;
        Intent intent = new Intent(AirQualityActivity.this, MapsActivity.class);
        Bundle bundle = new Bundle();
        bundle.putSerializable("MYLIST",(Serializable) data);
        intent.putExtras(bundle);
        startActivity(intent);
    }
bundle.putParcelableArrayList("MYLIST", data);
}


任何帮助都将不胜感激。提前感谢。

首先,我建议实现可打包,而不是可序列化。在以下特征方面,速度、反射等

回答你的问题:

您说“现在,当尝试在其他活动中加载列表,然后尝试通过intent发送列表时,我无法显示数据” 我编译了您的代码,它成功运行。它将列表从第一个活动发送到第二个活动,然后第二个活动被审核,没有任何问题。

尝试以下操作:

空气质量

public class AirQuality implements Parcelable {
private String mId;
private String mStation;
private String mState;
private String mCity;
private String mPollutantID;
private String mPollutantAvg;
private String mPollutantMin;
private String mPollutantMax;

public AirQuality() {
}

public AirQuality(String mId, String mStation, String mState, String mCity, String mPollutantID, String mPollutantAvg, String mPollutantMin, String mPollutantMax) {
    this.mId = mId;
    this.mStation = mStation;
    this.mState = mState;
    this.mCity = mCity;
    this.mPollutantID = mPollutantID;
    this.mPollutantAvg = mPollutantAvg;
    this.mPollutantMin = mPollutantMin;
    this.mPollutantMax = mPollutantMax;
}

protected AirQuality(Parcel in) {
    mId = in.readString();
    mStation = in.readString();
    mState = in.readString();
    mCity = in.readString();
    mPollutantID = in.readString();
    mPollutantAvg = in.readString();
    mPollutantMin = in.readString();
    mPollutantMax = in.readString();
}

public static final Creator<AirQuality> CREATOR = new Creator<AirQuality>() {
    @Override
    public AirQuality createFromParcel(Parcel in) {
        return new AirQuality(in);
    }

    @Override
    public AirQuality[] newArray(int size) {
        return new AirQuality[size];
    }
};

public String getmId() {
    return mId;
}

public void setmId(String mId) {
    this.mId = mId;
}

public String getmStation() {
    return mStation;
}

public void setmStation(String mStation) {
    this.mStation = mStation;
}

public String getmState() {
    return mState;
}

public void setmState(String mState) {
    this.mState = mState;
}

public String getmCity() {
    return mCity;
}

public void setmCity(String mCity) {
    this.mCity = mCity;
}

public String getmPollutantID() {
    return mPollutantID;
}

public void setmPollutantID(String mPollutantID) {
    this.mPollutantID = mPollutantID;
}

public String getmPollutantAvg() {
    return mPollutantAvg;
}

public void setmPollutantAvg(String mPollutantAvg) {
    this.mPollutantAvg = mPollutantAvg;
}

public String getmPollutantMin() {
    return mPollutantMin;
}

public void setmPollutantMin(String mPollutantMin) {
    this.mPollutantMin = mPollutantMin;
}

public String getmPollutantMax() {
    return mPollutantMax;
}

public void setmPollutantMax(String mPollutantMax) {
    this.mPollutantMax = mPollutantMax;
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel parcel, int i) {
    parcel.writeString(mId);
    parcel.writeString(mStation);
    parcel.writeString(mState);
    parcel.writeString(mCity);
    parcel.writeString(mPollutantID);
    parcel.writeString(mPollutantAvg);
    parcel.writeString(mPollutantMin);
    parcel.writeString(mPollutantMax);
}
意向接收部分

    Intent i = getIntent();
    Bundle b = i.getExtras();
    List<AirQuality> receivedDataList = (List<AirQuality>) b.getSerializable("MYLIST");
List<AirQuality> receivedDataList = bundle.getParcelableArrayList("MYLIST");
List-receivedDataList=bundle.getParcelableArrayList(“MYLIST”);

您所说的“我无法显示数据”是什么意思?请检查您在下一个活动中得到的值。我的意思是,我在文件AirQualityActivity.java中得到类型列表的解析JSON数据,然后通过intent将收到的列表发送到MapsActivity.java。在该文件的onCreate()方法中,我将其作为另一个方法调用的参数,该方法调用进行特定检查并在地图上显示位置和标记。当我直接在MapsActivity.java中获取列表时,我能够做到这一点,但现在当我必须从另一个文件获取列表时,我无法做到。显示空对象引用错误。我的意思是,我正在获取文件AirQualityActivity.java中类型列表的已解析JSON数据,然后通过intent将收到的列表发送到MapsActivity.java。在该文件的onCreate()方法中,我将其作为另一个方法调用的参数,该方法调用进行特定检查并在地图上显示位置和标记。当我直接在MapsActivity.java中获取列表时,我能够做到这一点,但现在当我必须从另一个文件获取列表时,我无法做到。显示空对象引用错误。
List<AirQuality> receivedDataList = bundle.getParcelableArrayList("MYLIST");