改造中的onFailure抛出了这个异常--“预期的BEGIN_ARRAY但是在第1列的字符串路径$”--如果我从gson转换器中删除setLinient(真)--同一行1 coloumn 1抛出一个异常“格式错误的json”--这在以前突然发生了,它工作正常,我很难分析是什么改变了导致这个问题的原因,请有人看看这个,帮我解决这个问题,
我有来自服务器的Json响应:
[{
"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"
}
]
}
]
}]这是我的改装代码:
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中:
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中的:
Call<List<Disposal>> getCollection(@Header("Authorization") String token);Disposal.java:
public class Disposal {
@SerializedName("disposal_type_category")
@Expose
public DisposalTypeCategory disposalTypeCategory;
@SerializedName("disposal_types")
@Expose
public List<DisposalType> disposalTypes = null;
}DisposalTypeCategory.java:
public class DisposalTypeCategory {
@serializedname("category_entry_total")
@expose
public String categoryEntryTotal;
}DisposalType.java:
public class DisposalType {
@serializedname("ID")
@expose
public String iD;
@serializedname("entries")
@expose
public List<Entries> entries = null;
}Entries.java:
public class Entries {
@serializedname("ID")
@expose
private int iD;
@SerializedName("entry_tally")
@Expose
private String entryTally;
}我已经为Gson设置了setLineant(真),因为如果我删除它,我会得到格式错误的json异常,即使是最近开始的这个问题也没问题,不确定它是否相关。在将2-3个新字段添加到API并更改了基本url之后,问题就开始了,但核心仍然保持不变。
发布于 2018-02-17 11:35:53
您需要修改DisposalType,条目类如下所示:
修改DisposalType类
public class DisposalType {
@serializedname("ID")
@expose
public String iD;
@serializedname("entries")
@expose
public List<Entries> entries;
}修改条目类
public class Entries {
@serializedname("ID")
@expose
private int iD;
@serializedname("entry_tally")
@expose
private int entry_tally;
}发布于 2018-04-18 07:47:29
这是在ApiInterface.java:里
Call<Disposal> getCollection(@Header("Authorization") String token);这是您的Retrofit代码
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) {
}
});https://stackoverflow.com/questions/48840747
复制相似问题