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

Posted

技术标签:

【中文标题】我如何使用改造和 recyclerView 解析 json 对象【英文标题】:How i can parsing json object with retrofit and recyclerView 【发布时间】:2020-02-29 21:59:55 【问题描述】:

我正在使用 GitHub API 在我的应用程序中显示星号最多的存储库及其名称和头像以及 recyclerView 中的描述,但是当我吃午饭时,应用程序一切正常,但 avatar_url 和登录返回 Null。

这是来自 Github API 的 JSON

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

我试过这个: 客户端类:

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;
    

服务类:

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();

物品类别 如果你检查了上面链接中的 jSON 文件,你会从名为 owner 的项目中找到一个子对象,我无法直接选择 avatar_url 的名称和所有者名称

 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;
        
    

【问题讨论】:

【参考方案1】:

查看 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;
    .........
    

【讨论】:

但我可以在 Item 构造函数中做什么 public Item(String name,String description, Owner owner,int stargazers ) this.name=name; this.description=描述; this.owner=所有者; this.stargazers=观星者; 【参考方案2】:

由于登录名和 avatar_url 在所有者对象下。 您需要为所有者对象创建一个单独的类,就像您为单个项目所做的那样。 并且不要忘记在您的 Item 类中提及对象类。

【讨论】:

【参考方案3】:

就我而言,stargazer 的拼写错误,只需更正拼写即可 示例:- 来自

stargazer_count

stargazers_count.

【讨论】:

以上是关于我如何使用改造和 recyclerView 解析 json 对象的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 RecyclerView 没有填充来自改造的数据?

recyclerView.addOnScrollListener - “使用 MVVM 改造分页”正在加载相同的响应/列表

如何使用改造和 moshi 解析换行符分隔的 JSON?

RecyclerView:没有附加适配器;使用改造跳过应用程序中的布局[重复]

如何使用改造[重复]将对象解析为json

如何使用改造和 gson 异步解析 json