首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OnFailure()方法抛出预期的BEGIN_ARRAY异常,但在第1列的第1列路径$上为字符串

OnFailure()方法抛出预期的BEGIN_ARRAY异常,但在第1列的第1列路径$上为字符串
EN

Stack Overflow用户
提问于 2018-02-17 11:24:22
回答 2查看 7.1K关注 0票数 2

改造中的onFailure抛出了这个异常--“预期的BEGIN_ARRAY但是在第1列的字符串路径$”--如果我从gson转换器中删除setLinient(真)--同一行1 coloumn 1抛出一个异常“格式错误的json”--这在以前突然发生了,它工作正常,我很难分析是什么改变了导致这个问题的原因,请有人看看这个,帮我解决这个问题,

我有来自服务器的Json响应:

代码语言:javascript
复制
[{
    "disposal_type_category": {
        "category_entry_total": "21"
    },
    "disposal_types": [{
            "ID": "78",
            "entries": [{
                    "ID": 2584,
                    "entry_tally": "1"
                },
                {
                    "ID": 2578,
                    "entry_tally": "1"
                }
            ]
        },
        {
            "ID": "1323",
            "entries": [{
                    "ID": 2583,
                    "entry_tally": "1"
                },
                {
                    "ID": 2579,
                    "entry_tally": "1"
                }
            ]
        }
    ]
},
{
    "disposal_type_category": {
        "category_entry_total": "25.2"
    },
    "disposal_types": [{
            "ID": "80",
            "entries": [{
                    "ID": 2583,
                    "entry_tally": "1"
                },
                {
                    "ID": 2579,
                    "entry_tally": "1"
                }

            ]
        },
        {
            "ID": "84",
            "entries": [{
                    "ID": 2583,
                    "entry_tally": "1"
                },
                {
                    "ID": 2579,
                    "entry_tally": "1"
                }

            ]
        }
    ]
}]

这是我的改装代码:

代码语言:javascript
复制
ApiInterface apiService =
            ApiClient.getClient().create(ApiInterface.class);
    String token = prefs.getString("token", "No name defined");//"No name defined" is the default value.

    Call<List<Disposal>> callm = apiService.getCollection(token);
    callm.enqueue(new Callback<List<Disposal>>() {
        @Override
        public void onResponse(Call<List<Disposal>> call, Response<List<Disposal>> response) {
            if (response.body() != null) {
                EntriesList = response.body();
                setRecyclerData(0);
            }
        }

        @Override
        public void onFailure(Call<List<Disposal>> call, Throwable t) {

        }
    });

这是在我的ApiClient.java中:

代码语言:javascript
复制
public static Retrofit getClient() {
    if (retrofit==null) {
        Gson gson = new GsonBuilder().setLenient().create();
        retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(ScalarsConverterFactory.create())
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build();
    }
    return retrofit;
}

这是在ApiInterface.java中的:

代码语言:javascript
复制
Call<List<Disposal>> getCollection(@Header("Authorization") String token);

Disposal.java:

代码语言:javascript
复制
public class Disposal {
    @SerializedName("disposal_type_category")
    @Expose
    public DisposalTypeCategory disposalTypeCategory;
    @SerializedName("disposal_types")
    @Expose
    public List<DisposalType> disposalTypes = null;
}

DisposalTypeCategory.java:

代码语言:javascript
复制
public class DisposalTypeCategory { 
    @serializedname("category_entry_total")
    @expose 
    public String categoryEntryTotal;
}

DisposalType.java:

代码语言:javascript
复制
public class DisposalType {
    @serializedname("ID")
    @expose 
    public String iD; 
    @serializedname("entries")
    @expose 
    public List<Entries> entries = null;
}

Entries.java:

代码语言:javascript
复制
public class Entries {
    @serializedname("ID") 
    @expose 
    private int iD;
    @SerializedName("entry_tally")
    @Expose
    private String entryTally;
}

我已经为Gson设置了setLineant(真),因为如果我删除它,我会得到格式错误的json异常,即使是最近开始的这个问题也没问题,不确定它是否相关。在将2-3个新字段添加到API并更改了基本url之后,问题就开始了,但核心仍然保持不变。

EN

回答 2

Stack Overflow用户

发布于 2018-02-17 11:35:53

您需要修改DisposalType,条目类如下所示:

修改DisposalType类

代码语言:javascript
复制
public class DisposalType {
    @serializedname("ID")
    @expose 
    public String iD; 

    @serializedname("entries")
    @expose 
    public List<Entries> entries;
}

修改条目类

代码语言:javascript
复制
public class Entries {
    @serializedname("ID") 
    @expose 
    private int iD;

 @serializedname("entry_tally") 
    @expose 
    private int entry_tally;

}
票数 0
EN

Stack Overflow用户

发布于 2018-04-18 07:47:29

这是在ApiInterface.java:

代码语言:javascript
复制
Call<Disposal> getCollection(@Header("Authorization") String token);

这是您的Retrofit代码

代码语言:javascript
复制
ApiInterface apiService =
            ApiClient.getClient().create(ApiInterface.class);
    String token = prefs.getString("token", "No name defined");//"No name defined" is the default value.

Call<Disposal> callm = apiService.getCollection(token);
callm.enqueue(new Callback<Disposal>() {
    @Override
    public void onResponse(Call<Disposal> call, Response<Disposal> response) {
        if (response.body() != null) {
            Disposal = response.body();

        }
    }

    @Override
    public void onFailure(Call<Disposal> call, Throwable t) {

    }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48840747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档