【问题标题】:Passing Custom Object List through Intent通过 Intent 传递自定义对象列表
【发布时间】:2018-12-30 04:42:05
【问题描述】:

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

这是Intent发送部分

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

这是Intent接收部分

    Intent i = getIntent();
    Bundle b = i.getExtras();
    List<AirQuality> receivedDataList = (List<AirQuality>) b.getSerializable("MYLIST");

这是实现 Serializable 的自定义对象类

import java.io.Serializable;

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

    /*Default Constructor*/
public AirQuality(String id, String station, String state, String city, String pollutantID, String pollutantAvg ,String pollutantMin, String pollutantMax) {
    mId = id;
    mStation = station;
    mState = state;
    mCity = city;
    mPollutantID = pollutantID;
    mPollutantAvg = pollutantAvg;
    mPollutantMin = pollutantMin;
    mPollutantMax = pollutantMax;
}

//Returns Item ID
public  String getId(){
    return  mId;
}

//Returns Station Name
public String getStation() {
    return mStation;
}

//Returns State Name
public String getState() {
    return mState;
}

//Returns City Name
public String getCity(){
    return mCity;
}

//Returns Pollutant ID
public String getPollutantID() {
    return mPollutantID;
}

//Return Pollutant Average value
public String getPollutantAvg() {
    return mPollutantAvg;
}

//Returns Pollutant Minimum value
public String getPollutantMin(){
    return mPollutantMin;
}

//Returns Pollutant Maximum value
public String getPollutantMax(){
    return mPollutantMax;
}

}

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

【问题讨论】:

  • “我无法显示数据”是什么意思?
  • 检查你在下一个活动中获得了什么价值。
  • 我的意思是,我在 AirQualityActivity.java 文件中获取 List 类型的解析 JSON 数据,然后通过意图将接收到的列表发送到 MapsActivity.java。在该文件的 onCreate() 方法中,我将其作为另一个方法调用的参数,该方法调用会进行某种检查并在地图上显示位置和标记。当我直接在 MapsActivity.java 中获取列表时,我能够做到这一点,但现在当我不得不从另一个文件中获取它时,我无法做到。显示空对象引用错误。

标签: android android-intent serializable


【解决方案1】:

首先我推荐实现 Parcelable 而不是 Serializable。在以下功能方面速度,反射等......

回答你的问题:

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

【讨论】:

  • 我的意思是,我在 AirQualityActivity.java 文件中获取 List 类型的解析 JSON 数据,然后通过意图将接收到的列表发送到 MapsActivity.java。在该文件的 onCreate() 方法中,我将其作为另一个方法调用的参数,该方法调用会进行某种检查并在地图上显示位置和标记。当我直接在 MapsActivity.java 中获取列表时,我能够做到这一点,但现在当我不得不从另一个文件中获取它时,我无法做到。显示空对象引用错误。
【解决方案2】:

试试这个:

空气质量

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

}

意图发送部分

bundle.putParcelableArrayList("MYLIST", data);

意图接收部分

List<AirQuality> receivedDataList = bundle.getParcelableArrayList("MYLIST");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-02
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 2011-06-22
    相关资源
    最近更新 更多