我如何使用改造和 recyclerView 解析 json 对象

How i can parsing json object with retrofit and recyclerView

我正在使用 GitHub API 在我的应用程序中显示最受好评的存储库及其名称和头像以及在 recyclerView 中的描述但是当我午餐时应用程序一切正常,但 avatar_url 并登录 return 空。

这是 JSON 来自 Github API

https://api.github.com/search/repositories?q=created:%3E2019-10-01&sort=stars&order=desc

我试过这个: 客户 class:

import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class Client {
    public static final String BASE_URL="https://api.github.com";
    public static Retrofit retrofit=null;

    public static Retrofit getClient()
    {
        if(retrofit==null)
        {
            retrofit=new Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(GsonConverterFactory.create()).build();

        }
        return retrofit;
    }
}

服务Class:

package com.example.gethubapi.api;

import com.example.gethubapi.model.ItemResponse;

import retrofit2.Call;
import retrofit2.http.GET;

public interface Service {

    @GET("/search/repositories?q=created:>2017-10-22&sort=stars&order=desc&page=2")
    Call<ItemResponse> getItems();
}

项目class 如果你检查上面 link 中的 jSON 文件,你会发现一个名为 owner 的项目的子对象,我无法 select [=33] 的名称=] 和所有者名称直接

 import com.google.gson.annotations.SerializedName;

    public class Item {
        @SerializedName("avatar_url")
        @Expose
        private String avatarUrl;

        @SerializedName("name")
        @Expose
        private String name;

        @SerializedName("description")
        @Expose
        private String description;

        @SerializedName("login")
        @Expose
        private String owner;

        @SerializedName("stargazers_count")
        @Expose
        private int stargazers;

        public Item(String avatar_url,String name,String description,String owner,int stargazers )
        {
            this.avatarUrl=avatar_url;
            this.name=name;
            this.description=description;
            this.owner=owner;
            this.stargazers=stargazers;

        }
        public String getAvatarUrl()
        {
            return avatarUrl;
        }
        public String getName()
        {
            return name;
        }
        public String getDescription()
        {
            return description;
        }
        public String getOwner()
        {
            return owner;
        }
        public int getStargazers()
        {
            return stargazers;
        }
    }

因为登录和 avatar_url 在所有者对象下。 您需要为 owner object 创建一个单独的 class ,就像您为单个项目所做的那样。 并且不要忘记在项目 class.

中提及对象 class

查看 JSON 响应,Owner 对象是 Item 对象的一部分。这意味着它嵌套在 Item 对象中。

public class Owner {
@SerializedName("avatar_url")
@Expose
private String avatarUrl;

@SerializedName("login")
@Expose
 private String login;

 public Owner(){}

 public void setAvatarUrl(String avatar_URL){
 this.avatarUrl = avatar_URL;
 }

 pubic String getAvatarUrl(){
 return avatarUrl;
 }

 public String getLogin(){
  return login;
 }

 public void setLogin(String login){
  this.login = login;}
  }

public class Item {
    @SerializedName("name")
    @Expose
    private String name;

    @SerializedName("description")
    @Expose
    private String description;

    @SerializedName("owner")
    @Expose
    private Owner owner;

     @SerializedName("stargazers_count")
    @Expose
    private int stargazers;
    .........
    }

在我的例子中,stargazer 拼写错误,请更正拼写 示例:- 来自

stargazer_count

stargazers_count.