1 回答
TA贡献2019条经验 获得超9个赞
通过查看您在问题中发布的示例 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类中获取任何对象。确保pandomats在声明时或在onResponse()方法内部使用它之前已初始化 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);
}
});
我希望现在一切都清楚了。如果您遇到错误,请先查看错误日志。如果不明白,请编辑问题并发布错误日志。
添加回答
举报