将特定的json嵌套对象重新传递到下一个活动

时间:2015-12-01 15:53:08

标签: android json retrofit

我有一个JSON嵌套对象,我一直试图传递,例如,电台"名称" onClick方法中的下一个活动。 2个问题:

1)我是否设置了我的模型类或是否有更好的方法?

2)我错过了哪些步骤通过" name"从特定对象的站点单击下一个活动?

我提供的代码错误(

java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference
                                                                                  at com.example.ogure.trolleyproject.Adapter.StationsAdapter$ViewHolder.onClick(StationsAdapter.java:52)

这是我的JSON嵌套对象

{
   id: 1,
   name: "Bus 1",
   code: "TROL1",
   tag_uid: "2HF4780H240827H40F284",
   last_spotted_at: "2015-09-25 01:20:30",
   last_spotted_station: 1,
   stations: [
       {
          id: 1,
          name: "Hennings Hall Station", //WHAT i want to pass
          lat: "40.000000",
          long: "41.000000",
          _pivot_bus_id: 1,
         _pivot_station_id: 1
       }

 }

这是我的模型类

public class Bus implements Serializable {

@SerializedName("id")
private int mStationId;
@SerializedName("name")
private String mStationName;
@SerializedName("code")
private String mStationCode;
@SerializedName("tag_uid")
private String mStationTag_uid;
@SerializedName("last_spotted_at")
private String mStationLast_spot_time;
@SerializedName("last_spotted_station")
private int mStationLast_spot_station;
@SerializedName("stations")
private List<stations> stationInfo;

public int getmStationId() {
    return mStationId;
}

public void setmStationId(int mStationId) {
    this.mStationId = mStationId;
}

public List<stations> getStationInfo() {
    return stationInfo;
}

public void setStationInfo(List<stations> stationInfo) {
    this.stationInfo = stationInfo;
}

public int getmStationLast_spot_station() {
    return mStationLast_spot_station;
}

public void setmStationLast_spot_station(int mStationLast_spot_station) {
    this.mStationLast_spot_station = mStationLast_spot_station;
}

public String getmStationLast_spot_time() {
    return mStationLast_spot_time;
}

public void setmStationLast_spot_time(String mStationLast_spot_time) {
    this.mStationLast_spot_time = mStationLast_spot_time;
}

public String getmStationTag_uid() {
    return mStationTag_uid;
}

public void setmStationTag_uid(String mStationTag_uid) {
    this.mStationTag_uid = mStationTag_uid;
}

public String getmStationCode() {
    return mStationCode;
}

public void setmStationCode(String mStationCode) {
    this.mStationCode = mStationCode;
}

public String getmStationName() {
    return mStationName;
}

public void setmStationName(String mStationName) {
    this.mStationName = mStationName;
}

public class stations {
    @SerializedName("id")
    private int stationID;
    @SerializedName("name")
    private String stationName;
    @SerializedName("lat")
    private double stationLat;
    @SerializedName("long")
    private double stationLong;
    @SerializedName("_pivot_bus_id")
    private int mStationPiviotBusId;
    @SerializedName("_pivot_station_id")
    private int mStationPiviotStationId;

    public int getmStationPiviotStationId() {
        return mStationPiviotStationId;
    }

    public void setmStationPiviotStationId(int mStationPiviotStationId) {
        this.mStationPiviotStationId = mStationPiviotStationId;
    }

    public int getmStationPiviotBusId() {
        return mStationPiviotBusId;
    }

    public void setmStationPiviotBusId(int mStationPiviotBusId) {
        this.mStationPiviotBusId = mStationPiviotBusId;
    }

    public double getStationLong() {
        return stationLong;
    }

    public void setStationLong(double stationLong) {
        this.stationLong = stationLong;
    }

    public double getStationLat() {
        return stationLat;
    }

    public void setStationLat(double stationLat) {
        this.stationLat = stationLat;
    }

    public String getStationName() {
        return stationName;
    }

    public void setStationName(String stationName) {
        this.stationName = stationName;
    }

    public int getStationID() {
        return stationID;
    }

    public void setStationID(int stationID) {
        this.stationID = stationID;
    }
}
}

这是我的适配器类

public class StationsAdapter extends   RecyclerView.Adapter<StationsAdapter.ViewHolder> {

private static List<Bus> mStations;
private static List<Bus.stations> mBusStations;


public StationsAdapter(List<Bus> stations) {
    mStations = stations;
}

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    public TextView TvStationName;
    public ImageView IvImageView;
    public CardView mCardView;

    public ViewHolder(View itemView) {
        super(itemView);

        TvStationName = (TextView) itemView.findViewById(R.id.station_name);
        IvImageView = (ImageView) itemView.findViewById(R.id.station_photo);
        mCardView = (CardView) itemView.findViewById(R.id.cv);
        mCardView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        int position = getAdapterPosition();
        Bus s = mStations.get(position);
        Bus.stations og = mBusStations.get(position); //HERE
        Intent i = new Intent(v.getContext(), StationActivity.class);
        i.putExtra("station_name", og.getStationName()); //and HERE is my problem
        v.getContext().startActivity(i);

    }
}

@Override
public StationsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.rv_card_item, parent, false);

    ViewHolder viewHolder = new ViewHolder(v);

    return viewHolder;
}

@Override
public void onBindViewHolder(StationsAdapter.ViewHolder holder, int position) {
    Bus stationPos = mStations.get(position);
    holder.TvStationName.setText(stationPos.getmStationName());
    holder.mCardView.setTag(position);


}

@Override
public int getItemCount() {
    return mStations.size();
}

1 个答案:

答案 0 :(得分:0)

将您的代码更改为以下内容:

public StationsAdapter(List<Bus> stations) {
    List<Bus.stations> busStations = new ArrayList<>();
    for (Bus bus : stations) {
        busStations.addAll(bus.getStationInfo());
    }
}

问题是你没有为你的mBusStations变量分配任何内容,这就是NPE抛出的原因。

不过,请不要使用令人困惑的命名。我在你的stationInfo课堂上谈论Bus