gson 我可以如何解析json对象与翻新和recyclerView

ttcibm8c  于 2022-11-06  发布在  其他
关注(0)|答案(3)|浏览(177)

我正在使用GitHub API在我的应用程序中显示最多星的存储库及其名称、头像和recyclerView中的描述,但当我午餐时,应用程序一切正常,但头像_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的名称和owner名称

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;
        }
    }
pxy2qtax

pxy2qtax1#

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

rkkpypqq2#

因为login和avatar_url在owner对象下,所以你需要为owner对象创建一个单独的类,就像你为一个单独的项目所做的那样。不要忘记在你的Item类中提到对象类。

ac1kyiln

ac1kyiln3#

在我的情况下,stargazer拼写错误,只是纠正拼写示例:- from
星象仪计数

观星者计数。

相关问题