预计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 data 。所以你的数据必须使用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());