Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 应为BEGIN\u数组,但为BEGIN\u对象2_Java_Android_Retrofit2 - Fatal编程技术网

Java 应为BEGIN\u数组,但为BEGIN\u对象2

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",

我对改装2有些问题

如何修复预期的BEGIN_数组,但在2中是BEGIN_对象

我不知道如何修复它

我怎么了

我的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<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;
    }

}