【发布时间】:2016-03-12 23:45:50
【问题描述】:
我有一个 Json 和搜索功能,我的问题是:
我有 3 件物品:
1. 测试1
2. 测试2
3.测试3
假设用户要搜索Test,他提交“Test”,所有相关的Test都会显示出来。
但是,如果他只想要“Test 1”,它会在标题中抛出错误,有时会显示,有时不会。
如果需要,你想要什么文件?
错误:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 2 column 2 path $
顺便提一下,搜索“2”时会显示“Test 2”,但搜索“Test 2”会报错。
它正在使用基本的 Json,在切换到新库后,它停止了工作。
json:
{"roms_center":[{"device_name":"Test 1","roms_count":"1","device_id":"0"},{"device_name":"Test 2","roms_count":"2","device_id":"1"}]}
解析它的代码:
界面
@GET("api.php")
Call<Model> getRoms_center(@Query("company_name") String name);
型号:
private class Model{
private List<CatItem> roms_center;
public List<CatItem> getRoms_center() {
return roms_center;
}
public void setRoms_center(List<CatItem> roms_center) {
this.roms_center = roms_center;
}
}
建立连接方法(库方法):
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Base)
.addConverterFactory(GsonConverterFactory.create())
.build();
ReApi Api = retrofit.create(ReApi.class);
Connection = Api.getRoms_center(Company);
Connection.enqueue(new Callback<Model>() {
@Override
public void onResponse(Call<Model> call, Response<Model> response) {
ProgressLoading.setVisibility(View.GONE);
isLoading = false;
List<CatItem> ROMs = response.body().getRoms_center();
for(int i = 0 ; i < ROMs.size() ; i ++ ){
CatItem Item = new CatItem();
Item.setDevice_Name(ROMs.get(i).getDevice_Name());
Item.setTotal_Downloads(ROMs.get(i).getTotal_Downloads());
Item.setDevice_ID(ROMs.get(i).getDevice_ID());
if(rowListItem == null)
rowListItem = new ArrayList<>();
rowListItem.add(Item);
}
Adapter.notifyDataSetChanged();
}
【问题讨论】:
-
错误日志怎么样?这似乎很有用
-
我已经编辑了操作。
-
您的 JSON 解析器看到的是一个数组而不是一个对象,因此它会抛出该错误。请同时包含您的解析代码和正在解析的 JSON
-
已编辑,请检查。
-
对不起,错误的json,再检查一下.. json是正确的,只是一个复制问题:p。