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