json结构P.S参考不是动态的,因此只有一个JSON数据阵列;
我在文档上做了所有操作
MainActivity.Class:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Service.getInstance()
.getJSONApi()
.loadList()
.enqueue(new Callback<List<Pandomats>>() {
@Override
public void onResponse(Call<List<Pandomats>> call, Response<List<Pandomats>> response) {
pandomats.addAll(response.body());
Log.v("ListPandomats", String.valueOf(pandomats.size()));
}
@Override
public void onFailure(Call<List<Pandomats>> call, Throwable t) {
}
});
service.java:
public class Service {
private static final Service ourInstance = new Service();
private static final String BASE_URL = "http://myurl";
private Retrofit mRetrofit;
public static Service getInstance() {
return ourInstance;
}
private Service() {
mRetrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
public JsonPlaceApi getJSONApi() {
return mRetrofit.create(JsonPlaceApi.class);
}
}
jsonplaceapi.java:
public interface JsonPlaceApi {
@GET("/api/device/get/")
Call<List<Pandomats>> loadList();
}
pandomats.java:
public class Pandomats {
@SerializedName("id")
@Expose
private String address;
@SerializedName("model")
@Expose
private String model;
@SerializedName("latitude")
@Expose
private Double latitude;
@SerializedName("longitude")
@Expose
private Double longitude;
@SerializedName("lastDeviceData")
@Expose
private LastDeviceData lastDeviceData;
@SerializedName("image")
@Expose
private Object image;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public Double getLatitude() {
return latitude;
}
public void setLatitude(Double latitude) {
this.latitude = latitude;
}
public Double getLongitude() {
return longitude;
}
public void setLongitude(Double longitude) {
this.longitude = longitude;
}
public LastDeviceData getLastDeviceData() {
return lastDeviceData;
}
public void setLastDeviceData(LastDeviceData lastDeviceData) {
this.lastDeviceData = lastDeviceData;
}
public Object getImage() {
return image;
}
public void setImage(Object image) {
this.image = image;
}
}
我需要我的列表填充getModel,例如如何实现它或有错误的地方?
通过查看您在问题中发布的示例JSON数据格式,我认为API不返回JSONARRAY,它返回 JSONOBJECT 。无论如何,我会告诉您如何从解析对象中获取所需的数据,无论是JSONARRAY还是JSONOBJECT。
您几乎靠近要搜索的解决方案。只需在onResponse()
方法内粘贴以下代码即可。
@Override
public void onResponse(Call<List<Pandomats>> call, Response<List<Pandomats>> response) {
pandomats.addAll(response.body());
Log.v("ListPandomats", String.valueOf(pandomats.size()));
for (int i = 0; i < pandomats.size(); i++) {
Pandomats p = pandomats.get(i);
Log.v("ListPandomats", p.getModel()); // prints model
Log.v("ListPandomats", String.valueOf(p.getLatitude())); // prints latitude
}
}
就像上面一样,您可以从Pandomats
类获取任何对象。确保您在声明时或在onResponse()
方法中使用它之前或在使用它之前初始化了pandomats
ArrayList。否则您将使用NullPointerException
。
也不要忘记记录onFailure()
方法内API的错误响应。这非常重要。
@Override
public void onFailure(Call<List<Pandomats>> call, Throwable t) {
Log.e("ListPandomats", "Error" t);
}
正如我在我认为API没有返回JSONARRAY之前所说的那样,它重新播放了JSONOBJECT。如果返回JSONOBJECT,则需要更改下面的代码。
jsonapi.java
public interface JsonPlaceApi {
@GET("/api/device/get/")
Call<Pandomats> loadList(); // remove List<> from return type
}
mainActivity.java
Service.getInstance()
.getJSONApi()
.loadList()
.enqueue(new Callback<Pandomats>() { /* remove List<> */
@Override
public void onResponse(Call<Pandomats> call, /* remove List<> */ Response<List<Pandomats>> response) {
Pandomats p = response.body();
// without for loop iteration you can get the data
Log.v("ListPandomats", p.getModel()); // prints model
Log.v("ListPandomats", String.valueOf(p.getLatitude())); // prints latitude
}
@Override
public void onFailure(Call<Pandomats> call, Throwable t) { /* remove List<> */
Log.e("ListPandomats", "Error" t);
}
});
我希望现在很清楚。如果收到错误,只需先查看错误日志即可。如果不理解,请编辑问题并发布错误日志。