预计BEGIN_ARRAY但是BEGIN_OBJECT改造2
我有一些关于retrofit2的问题
如何修复预期的BEGIN_ARRAY但是在retrofit2中是BEGIN_OBJECT
我不知道要解决它
我错了什么?
我的json是
{ "result": true, "message": "success", "data": [ { "id": "10", "type_name": "pppppp" }, { "id_mt": "11", "type_name": "aaaaaa" } ] }
我的模特课是
public class MessageFastModel { private boolean result; private String message; private List data; public boolean isResult() { return result; } public void setResult(boolean result) { this.result = result; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public List getData() { return data; } public void setData(List data) { this.data = data; } public static class DataBean { private String id; private String type_name; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getType_name() { return type_name; } public void setType_name(String type_name) { this.type_name = type_name; } } }
我的代码是
@FormUrlEncoded @POST("api/message_type") Call listMessageFast(@Field("token") String token);
和
Call dddddCall = ooooo.listMessageFast(Preferences.getToken()); dddddCall.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if (response.isSuccessful()) { Log.d("ddd", "onResponse: " + response.body().getData().size()); } } @Override public void onFailure(Call call, Throwable t) { Log.e("ddd", "onFailure: " + t.getMessage()); } });
但我的错误是
E / ddd:onFailure:java.lang.IllegalStateException:预期为BEGIN_ARRAY,但在第1行第44列路径为$ .data时为BEGIN_OBJECT
什么问题 ? 谢谢!
@GET("photos") Call savePhoto();
并按照这个>>>调用您的改造方法
Call call = apiService.savePhoto(); call.enqueue(new retrofit2.Callback () { @Override public void onResponse(Call call, retrofit2.Response response) { int statusCode = response.code(); try { Model model; // Log.w("resedatasync", new Gson().toJson(response)); model= response.body();
并像这样创建你的模型类
public class Model{ @SerializedName("ArrayName") public List arraylist= new ArrayList<>(); @SerializedName("message") private String message; public class DataBean { @SerializedName("id") private String id; @SerializedName("typename") private String typename; @SerializedName("typename") public void settypename(String typename) { this.typename= typename; } }
}
当你有问题
java.lang.IllegalStateException:预期BEGIN_ARRAY但在第1行第44列路径为$ .data时为BEGIN_OBJECT
我们必须知道需要JSONArray
。你有List
。所以你的数据必须使用JSONArray
。
可能是你的问题
Log.d("ddd", "onResponse: " + response.body().getData().size());
你可以这样做。
System.out.println(response.body().string());
并显示您的信息。
试试这堂课。
public class MessageFastModel { private boolean result; private String message; private DataBean data; public boolean isResult() { return result; } public void setResult(boolean result) { this.result = result; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public DataBean getData() { return data; } public void setData(DataBean data) { this.data = data; } public static class DataBean { private String id; private String type_name; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getType_name() { return type_name; } public void setType_name(String type_name) { this.type_name = type_name; } } }
并删除Log.d("ddd", "onResponse: " + response.body().getData().size());