【问题标题】:Retrofit response not getting改造响应没有得到
【发布时间】:2017-10-24 12:15:57
【问题描述】:

您好,我正在使用改造进行 JSON 解析。我得到了 200 个响应代码,但我的 ArrayList 没有得到任何适当的响应。我只得到对“状态”字段的响应。其他字段为空。请帮帮我。JSON数据在下面给出谢谢:)

//json解析方法

     private void load() {

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
              .addConverterFactory(GsonConverterFactory.create()).client(client)


        Apiinterface request = retrofit.create(Apiinterface.class);
        Call<MyPojo> call = request.newsget(new Newslist_Post("en",0));
        call.enqueue(new Callback<MyPojo>() {
            @Override
            public void onResponse(Call<MyPojo> call, Response<MyPojo> response{
                try {
                    if (response.code() == 200) {
                        Log.d("act", "onResponse - Status : " +response.code());
                        Gson gson = new Gson();
                       TypeAdapter<MyPojo>adapter=gson.getAdapter(MyPojo.class);
                        try {
                            if (response.errorBody() != null) {
                       Toast.makeText(MainActivity.this, "Request Success", Toast.LENGTH_SHORT).show();
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }

                    MyPojo news_model = response.body();

                   // data = new ArrayList<>(Arrays.asList(news_model.getNews()));
                    status=news_model.isStatus();
                    count=news_model.getCount();
                    data=news_model.getNews();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            @Override
            public void onFailure(Call<MyPojo> call, Throwable t) {
                Toast.makeText(MainActivity.this, "Please Check your network",Toast.LENGTH_SHORT).show();
              //Log.d("Error",t.getMessage());
            }
       });}

模型类

这些模型类用于解析JSON,在这个模型类列表中获取第二个模型类内容

 public class MyPojo{
 @SerializedName("status")
 private boolean status;
 @SerializedName("count")
 private int count;
 @SerializedName("news")
 private List<News>news;
 public int getCount() {
    return count;
 }
 public List<News> getNews() {
    return news;
 }
 public boolean isStatus() {
    return status;
 }

第二个模型类

在这个模型类中包含新闻数据,这个新闻数据在第一个模型类列表中。

 public class News

 {

 private String news_id;

 private String newss_description;

 private String newss_title;

 private String news_image;

  private String lang;

 public String getNews_id ()
 {
    return news_id;
 }

 public String getNewss_description ()
  {
    return newss_description;
  }

public String getNewss_title ()
{
    return newss_title;
}
public String getNews_image ()
{
    return news_image;
}
public String getLang ()
{
    return lang;
}
}



 //JSON


       {
"status": true,
"count": 2,
"news": [
    {
        "news_id": "2",
        "news_image": "5fc2eaf170e6fc8ba6aa3974ce0c2e11.jpg",
        "newss_title": "new 1",
        "newss_description": "test news",
        "lang": "en"
    },
    {
        "news_id": "1",
        "news_image": "31e3650272d006d24ac6c5fd580cace0.jpg",
        "newss_title": "cooking class with tanya in the name of healthy",
        "newss_description": "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.",
        "lang": "en"
    }
]
}

【问题讨论】:

  • 您的 POJO @SerializedName 中的名称必须与您的 JSON 响应中的相同

标签: java android json retrofit2


【解决方案1】:

新闻模型项缺少 SerializedName 和 Expose

@SerializedName("code")
@Expose

像这样改变你的 News.class。

public class News {
    @SerializedName("news_id")
    @Expose
    private String news_id;
    @SerializedName("newss_description")
    @Expose
    private String newss_description;

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

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

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

    public String getNews_id() {
        return news_id;
    }

    public String getNewss_description() {
        return newss_description;
    }

    public String getNewss_title() {
        return newss_title;
    }

    public String getNews_image() {
        return news_image;
    }

    public String getLang() {
        return lang;
    }
}

【讨论】:

    【解决方案2】:

    如下更改您的 MyPojo 和 News 类

    import java.util.List;
    import com.google.gson.annotations.Expose;
    import com.google.gson.annotations.SerializedName;
    
    public class Example {
    
    @SerializedName("status")
    @Expose
    private Boolean status;
    @SerializedName("count")
    @Expose
    private Integer count;
    @SerializedName("news")
    @Expose
    private List<News> news = null;
    
    public Boolean getStatus() {
    return status;
    }
    
    public void setStatus(Boolean status) {
    this.status = status;
    }
    
    public Integer getCount() {
    return count;
    }
    
    public void setCount(Integer count) {
    this.count = count;
    }
    
    public List<News> getNews() {
    return news;
    }
    
    public void setNews(List<News> news) {
    this.news = news;
    }
    
    }
    
    // News class
    
    import com.google.gson.annotations.Expose;
    import com.google.gson.annotations.SerializedName;
    
    public class News {
    
    @SerializedName("news_id")
    @Expose
    private String newsId;
    @SerializedName("news_image")
    @Expose
    private String newsImage;
    @SerializedName("newss_title")
    @Expose
    private String newssTitle;
    @SerializedName("newss_description")
    @Expose
    private String newssDescription;
    @SerializedName("lang")
    @Expose
    private String lang;
    
    public String getNewsId() {
    return newsId;
    }
    
    public void setNewsId(String newsId) {
    this.newsId = newsId;
    }
    
    public String getNewsImage() {
    return newsImage;
    }
    
    public void setNewsImage(String newsImage) {
    this.newsImage = newsImage;
    }
    
    public String getNewssTitle() {
    return newssTitle;
    }
    
    public void setNewssTitle(String newssTitle) {
    this.newssTitle = newssTitle;
    }
    
    public String getNewssDescription() {
    return newssDescription;
    }
    
    public void setNewssDescription(String newssDescription) {
    this.newssDescription = newssDescription;
    }
    
    public String getLang() {
    return lang;
    }
    
    public void setLang(String lang) {
    this.lang = lang;
    }
    
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-07
      • 2016-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      • 2016-01-09
      相关资源
      最近更新 更多