我如何使用改造和 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.
我正在使用 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.