2017-01-16 55 views
0

适配器问题。我正在使用retrofit 2来分析JSON数据。 JSON示例,模型和适配器代码如下。适配器中的Android Retrofit 2问题

JSON例如:

[{ 
"id":1, 
"type":"TEMPERATURE", 
"measurements":[ 
    { 
     "value":"22.58", 
     "time":"2017-01-11T12:20:44.701" 
     }] 
},{ 
"id":2, 
"type":"HUMIDITY", 
"measurements":[ 
    { 
     "value":"52.366", 
     "time":"2017-01-11T12:20:44.731" 
     }] 
},{ 
"id":3, 
"type":"LUMINOSITY", 
"measurements":[ 
    { 
     "value":"1.0", 
     "time":"2017-01-11T12:20:44.742" 
     }] 
}] 

型号Senzori:

public class Senzori { 

@SerializedName("id") 
@Expose 
private Integer id; 
@SerializedName("type") 
@Expose 
private String type; 
@SerializedName("measurements") 
@Expose 
private List<Measurement> measurements = new ArrayList<>(); 

public Integer getId() { 
    return id; 
} 

public void setId(Integer id) { 
    this.id = id; 
} 

public String getType() { 
    return type; 
} 

public void setType(String type) { 
    this.type = type; 
} 

public List<Measurement> getMeasurements() { 
    return measurements; 
} 

public void setMeasurements(List<Measurement> measurements) { 
    this.measurements = measurements; 
} 

} 

模型测量:

public class Measurement { 

@SerializedName("value") 
@Expose 
private String value; 
@SerializedName("time") 
@Expose 
private String time; 

public String getValue() { 
    return value; 
} 

public void setValue(String value) { 
    this.value = value; 
} 

public String getTime() { 
    return time; 
} 

public void setTime(String time) { 
    this.time = time; 
} 
} 

适配器:

public class SenzoriAdapter extends RecyclerView.Adapter<SenzoriAdapter.Holder>{ 

private List<Senzori> mSenzori; 

public SenzoriAdapter(){ 
    mSenzori = new ArrayList<>(); 
} 

@Override 
public Holder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View row = LayoutInflater.from(parent.getContext()).inflate(R.layout.main_item, parent, false); 
    return new Holder(row); 
} 

@Override 
public void onBindViewHolder(Holder holder, int position) { 
    Senzori curr = mSenzori.get(position); 
    holder.senzoriType.setText(curr.getType()); 
    holder.senzoriLastAlive.setText(curr.getMeasurements().getTime()); 
    holder.senzoriMeasurement.setText(curr.getMeasurements().getValue()); 

} 

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

public void addSenzori(Senzori senzori) { 
    mSenzori.add(senzori); 
    notifyDataSetChanged(); 
} 

public class Holder extends RecyclerView.ViewHolder { 
    private TextView senzoriType, senzoriLastAlive, senzoriMeasurement; 
    public Holder(View itemView) { 
     super(itemView); 
     senzoriType = (TextView) itemView.findViewById(R.id.senzoriType); 
     senzoriLastAlive = (TextView) itemView.findViewById(R.id.senzoriLastAlive); 
     senzoriMeasurement = (TextView) itemView.findViewById(R.id.senzoriMeasurement); 
    } 
} 
} 

我得到getTime()和getValue()的“无法解析方法”。

回答

2

由于getMeasurements()返回List并且您显示的JSON只包含一个项目。因此,你应该这样称呼它:

holder.senzoriLastAlive.setText(curr.getMeasurements().get(0).getTime()); 
holder.senzoriMeasurement.setText(curr.getMeasurements().get(0).getValue()); 

我建议增加一个检查,看看是否getMeasurements()不为空,否则你会得到一个异常。

+0

谢谢你,它的工作,我仍然无法接受3分钟的答案,但我肯定会做的 – mustangws

1

问题是你没有给出任何关于你想要查找的值或时间的列表项的信息。

holder.senzoriMeasurement.setText(curr.getMeasurements().get(<item you wish to get>).getValue; 

如果你想在列表中的第一项

holder.senzoriMeasurement.setText(curr.getMeasurements().get(0).getValue;