【问题标题】:Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $ with retrofit [duplicate]预期为 BEGIN_ARRAY,但在第 1 行第 2 列路径 $ 处为 BEGIN_OBJECT 并进行了改造 [重复]
【发布时间】:2018-09-13 23:30:18
【问题描述】:

Retrofit 抛出上述错误。我已经尝试了一些我在这里看到的解决方案,但没有一个有效。这是我的代码

public void getMaterials()
     {
         RestAdapter adapter = new RestAdapter.Builder().setEndpoint(Root_Url).build();
         materialAPI api = adapter.create(materialAPI.class);
         api.getMaterials(String.valueOf(categoryId), new Callback <List<materialClass>>() {
             @Override
             public void success(List<materialClass> list, Response response) {

                 materials = list;
                 showList();
                 customAdapter customAdapter = new customAdapter();
                 listView.setAdapter(customAdapter);
             }

             @Override
             public void failure(RetrofitError error) {
                 Log.i(TAG, "Error here"+error.toString()); 
             }
         });

     }





public class materialClass{
        private String courseTitle;
        private String courseAuthor;
        private String fileName;
        private String fileSize;
        private String description;
        private long Id;
        public String getMaterialName(){return courseTitle;}
        public String getAuthorName(){return  courseAuthor;}
        public String getFileName(){return fileName;}
        public String getFileSize(){return fileSize;}
        public String getFileDescription(){return description;}
        public long getId(){return  Id;}
        public void setMaterialName(String resourceName){this.courseTitle =resourceName;}
        public void setAuthorName(String authorName){this.courseAuthor = authorName;}
        public void setFileName(String fileName){this.fileName = fileName;}
        public void setFileSize(String fileSize){this.fileSize = fileSize;}
        public void setFileDescription(String fileDescription){this.description = fileDescription;}
        public  void setFileContent(byte[] resourceFile){this.resourceFile = resourceFile;}
        public void setId(long Id){this.Id = Id;}
}





public interface materialAPI {

    @GET("/Course/{Id}")
    public void getMaterials(@Path("Id") String Id,  Callback<List<materialClass>> response);

}

我已经包含了我正在实施的所有代码。下面是一个低 json 响应应该看起来的样子。顺便说一下,这是一个测试数据。

{
"Id": 1,
"courseTitle": "Testing",
"courseAuthor": "Just Testing",
"dateCreated": "2018-12-07T00:00:00",
"description": "Just to see if it's working",
"categoryName": "programming",
"fileName": "Android_Programming_Succinctly.pdf",
"fileSize": "3038893"
}

Json 不是数组格式,我猜这就是改造引发错误的原因。我如何将这些数据传递给改造

【问题讨论】:

    标签: android json retrofit


    【解决方案1】:

    根据提供的测试数据

    改变这个

    java

    public interface materialAPI {
    @GET("/Course/{Id}")
     public void getMaterials(@Path("Id") String Id, Callback<List<materialClass>> response);
    }
    

    收件人

    public interface materialAPI {
        @GET("/Course/{Id}")
        public void getMaterials(@Path("Id") String Id,  Callback<materialClass> response);
    }
    

    【讨论】:

      【解决方案2】:

      您有 2 个选项。

      第一个是您修改 Android 代码以接受单个 JSON 对象而不是列表。您可以通过仅用 materialClass 替换所有 List[materialClass] 来做到这一点。

      另一种方法是修改服务器代码以返回 JSON 数组,而不仅仅是 JSON 对象。

      JSON 对象以花括号开头,例如 {...},而 JSON 数组以方括号开头,例如 [...]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-14
        • 1970-01-01
        • 2019-07-29
        • 2018-01-16
        相关资源
        最近更新 更多