我如何使用改造和 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 改造分页”正在加载相同的响应/列表