android - 如何使用 Retrofit 获取 JSON 响应

标签 android retrofit

{
"records": [
    {
        "id": "744",
        "categoryname": "Floor Tiles",
        "photo": "",
        "width": "0",
        "height": "0",
        "secondlevelcategory": [
            {
                "id": "833",
                "categoryname": "Digital Vitrified Tiles",
                "photo": "http://image.com",
                "width": "1031",
                "height": "700"
            }
        ]
    },
    {
        "id": "744",
        "categoryname": "Floor Tiles",
        "photo": "",
        "width": "0",
        "height": "0",
        "secondlevelcategory": [
            {
                "id": "833",
                "categoryname": "Digital Vitrified Tiles",
                "photo": "http://image.com",
                "width": "1031",
                "height": "700"
            }
        ]
    }
] }

我如何将此 Json 响应转换为 Retrofit bean 我收到 Gson 错误,如 Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $

private void callCategoryApi() {
    Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").create();
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(GithubUserAPI.CATEGORY_API)
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build();

    GithubUserAPI githubUserAPI = retrofit.create(GithubUserAPI.class);
    Call<List<CatResponseData>> call = githubUserAPI.getCategory(Utils.key);
    call.enqueue(this);

}

@Override
public void onResponse(Call<List<CatResponseData>> call, Response<List<CatResponseData>> response) {
    int code = response.code();
    if (code == 200) {
        List<CatResponseData> res = response.body();
        for(CatResponseData resDat : res){
            System.out.println("=== Response : " + resDat.getCategoryname());
        }
    }else{
        Toast.makeText(this, "Did not work: " + String.valueOf(code), Toast.LENGTH_LONG).show();
    }
}

@Override
public void onFailure(Call<List<CatResponseData>> call, Throwable t) {
    System.out.println("=== Error : " + t.getMessage());
}

api调用是

@POST("/apikey/{apikey}")
Call<List<CatResponseData>> getCategory(@Path("apikey") String user);

字符串 CATEGORY_API = "https://api.callingservice.com ";

请帮我解决这个问题我如何将 Json 响应转换为 Bean 和我的 Bean 类是这样的

public class CategoryBean {
List<CatResponseData> responseData = new ArrayList<CatResponseData>(); } class CatResponseData {
String id;
public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}
public String getCategoryname() {
    return categoryname;
}
public void setCategoryname(String categoryname) {
    this.categoryname = categoryname;
}
String categoryname; }

最佳答案

这应该是您赋予 Retrofit 的类。不是 beans 列表,因为它们被封装在一个对象中。

 public class CategoryResponse {
     @SerializedName("records")
     List<CategoryBean> responseData;

     public List<CatResponseData> getResponseData() {
          return responseData;
     }
 }

关于android - 如何使用 Retrofit 获取 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38146854/

相关文章:

java - Retrofit 2 总是返回 onFailure

安卓改造 : POST Request with JSON payload and Images Attached

java - 解析改造 response.body()

java - 无法使用 Retrofit 从 API 检索键/值对

java - 使用临时缓存请求远程 Observable 的 RxJava 模式

android - GCM 广播接收器

android - 用于以编程方式更新 apk 的 Xamarin 应用程序

具有 videoview 的 Android Scrollview 出现问题

java - android 复杂的 onDraw() 方法与自定义布局

android - 我可以使用 retrofit 2 重新调用