Java 应为BEGIN\u数组,但为BEGIN\u对象2
我对改装2有些问题 如何修复预期的BEGIN_数组,但在2中是BEGIN_对象 我不知道如何修复它 我怎么了 我的json是Java 应为BEGIN\u数组,但为BEGIN\u对象2,java,android,retrofit2,Java,Android,Retrofit2,我对改装2有些问题 如何修复预期的BEGIN_数组,但在2中是BEGIN_对象 我不知道如何修复它 我怎么了 我的json是 { "result": true, "message": "success", "data": [ { "id": "10", "type_name": "pppppp" }, { "id_mt": "11",
{
"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<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 List<DataBean> getData() {
return data;
}
public void setData(List<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;
}
}
}
公共类MessageFastModel{
私有布尔结果;
私有字符串消息;
私人名单数据;
公共布尔值isResult(){
返回结果;
}
公共void setResult(布尔结果){
this.result=结果;
}
公共字符串getMessage(){
返回消息;
}
公共无效设置消息(字符串消息){
this.message=消息;
}
公共列表getData(){
返回数据;
}
公共无效设置数据(列表数据){
这个数据=数据;
}
公共静态类数据库{
私有字符串id;
私有字符串类型\u名称;
公共字符串getId(){
返回id;
}
公共无效集合id(字符串id){
this.id=id;
}
公共字符串getType_name(){
返回类型名称;
}
public void setType_name(字符串类型_name){
this.type\u name=type\u name;
}
}
}
我的代码是
@FormUrlEncoded
@POST("api/message_type")
Call<MessageFastModel> listMessageFast(@Field("token") String token);
@FormUrlEncoded
@POST(“api/消息类型”)
调用listMessageFast(@Field(“token”)字符串token);
及
调用ddddd Call=ooooo.listMessageFast(Preferences.getToken());
ddd call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.issusccessful()){
Log.d(“ddd”,“onResponse:+response.body().getData().size());
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.e(“ddd”,“onFailure:+t.getMessage());
}
});
但我的错误是
E/ddd:onFailure:java.lang.IllegalStateException:应为
BEGIN_数组,但在第1行第44列path$.data处是BEGIN_对象
有什么问题吗?谢谢 当你遇到问题时
java.lang.IllegalStateException:应为BEGIN_数组,但在第1行第44列path$.data处为BEGIN_对象
我们必须知道哪里需要JSONArray
。您有列表数据
。因此您的数据必须使用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());
@GET(“照片”)
调用savePhoto();
然后像这样调用您的改装方法>>>
Call<Model> call = apiService.savePhoto();
call.enqueue(new retrofit2.Callback<Model>() {
@Override
public void onResponse(Call<Model> call, retrofit2.Response<Model> response) {
int statusCode = response.code();
try {
Model model;
// Log.w("resedatasync", new Gson().toJson(response));
model= response.body();
Call Call=apiService.savePhoto();
call.enqueue(新的2.Callback(){
@凌驾
公共void onResponse(呼叫,改装2.响应){
int statusCode=response.code();
试一试{
模型;
//w(“resedatasync”,new Gson().toJson(response));
model=response.body();
然后像这样创建模型类
public class Model{
@SerializedName("ArrayName")
public List<DataBean > 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;
}
}
公共类模型{
@SerializedName(“ArrayName”)
public List arraylist=新的arraylist();
@SerializedName(“消息”)
私有字符串消息;
公共类数据库{
@序列化名称(“id”)
私有字符串id;
@SerializedName(“类型名”)
私有字符串类型名;
@SerializedName(“类型名”)
public void settypename(字符串typename){
this.typename=typename;
}
}
}当JSON的结构与收件人模型类的结构不匹配时会发生这种情况。还可以使用
@Expose
和@SerializedName(“receivingJsonVariableName”)
用于模型类中的每个变量。比较MessageFastModel和response json是否都需要相同请显示MessageFastModelclass@joao86我编辑了一篇帖子,请查收me@ARR.s您确定返回的JSON是这样的吗?因为这里的代码似乎没有任何问题。是的,如果n我不喜欢他所说的。@joao86这是错误的,API返回一个JSONObject,包含“result”、“message”和“data”。只有“data”字段是JSONArray。错误“应该是BEGIN\u数组,但却是BEGIN\u对象”证实了这一点。您JSON
root必须是[]
在你的回复中。你能在你的代码中显示MessageFastModel
类吗?@KeLiuyue我编辑了一篇帖子,请帮我检查一下谢谢!你能添加System.out.println(response.body().string();
?并显示消息吗?你打印了回复吗?
Call<Model> call = apiService.savePhoto();
call.enqueue(new retrofit2.Callback<Model>() {
@Override
public void onResponse(Call<Model> call, retrofit2.Response<Model> 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<DataBean > 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;
}
}