【问题标题】:Retrofit: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 2 column 2 path改造:预期 BEGIN_OBJECT 但在第 2 行第 2 列路径处是 BEGIN_ARRAY
【发布时间】: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。

标签: android retrofit


【解决方案1】:

尝试改变你的界面:

 @GET("api.php")
Call<List<Model>> getRoms_center(@Query("company_name") String name);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 2020-11-17
    • 1970-01-01
    相关资源
    最近更新 更多