API-интерфейс, использующий Android Retrofit, не работает - PullRequest
0 голосов
/ 20 мая 2018

Я работаю над проектом Android и использую модификацию для извлечения данных JSON.Мой JSON выглядит так.

{  
       "status":"ok",
       "count":1,
       "count_total":1,
       "pages":1,
       "posts":[  
          {  
             "id":4,
             "type":"post",
             "slug":"my news",
             "status":"publish",
             "title":"test news title goes here",
             "title_plain":"test news title goes here",
             "content":"<p>news title goes<\/span><\/p>\n",
             "date":"2018-05-12 20:00:51",
             "modified":"2018-05-12 20:00:51"
          }
       ]
    }

Мой класс модели -Article.java

public class Article {

@SerializedName("id")
@Expose
private Integer id;

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

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

@SerializedName("title_plain")
@Expose
private String titlePlain;

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

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


public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getTitlePlain() {
    return titlePlain;
}

public void setTitlePlain(String titlePlain) {
    this.titlePlain = titlePlain;
}

public String getContent() {
    return content;
}

public void setContent(String content) {
    this.content = content;
}

public String getDate() {
    return date;
}

public void setDate(String date) {
    this.date = date;
}

}

Я звоню для модификации метода, подобного этому, и уже добавила диалоговое окно для загрузки.Но я не получаю ответ от API.(Он отлично работает, когда я печатаю в браузере)

       NewsService service = RetrofitClient.getRetrofitInstance().create(NewsService.class);
    Call<List<Article>> call = service.getNewestArticles();
    call.enqueue(new Callback<List<Article>>() {
        @Override
        public void onResponse(Call<List<Article>> call, Response<List<Article>> response) {
            dialog.dismiss();
            generateDataList(response.body());
        }

        @Override
        public void onFailure(Call<List<Article>> call, Throwable t) {

        }
    });


   private void generateDataList(List<Article> articles) {

    lstNews.setHasFixedSize(true);
    layoutManager = new LinearLayoutManager(getActivity());
    lstNews.setLayoutManager(layoutManager);


    adapter = new ListNewsAdapter(articles,getActivity().getBaseContext());
    adapter.notifyDataSetChanged();
    lstNews.setAdapter(adapter);

    lstNews.setAdapter(adapter);
}

Я новичок в модернизации.Может ли кто-нибудь помочь мне решить эту проблему?

1 Ответ

0 голосов
/ 20 мая 2018

На самом деле вы загружаете не список (массив) статей, а объект, содержащий список статей, поэтому вам нужно 2 класса моделей:

public class ArticleResponse {
    @SerializedName("status")
    @Expose
    private String status;

    @SerializedName("count")
    @Expose
    private int count;

    @SerializedName("count_total")
    @Expose
    private int countTotal;

    @SerializedName("pages")
    @Expose
    private int pages;

    @SerializedName("posts")
    @Expose
    private List<Article> articles;

    //getter/Setter
    //...
}

Служба модернизации должна вместо этого возвратить этот ArticleResponse,тогда вы можете получить массив статей через articles геттер от вашей модели

NewsService service = RetrofitClient.getRetrofitInstance().create(NewsService.class);
    Call<ArticleResponse> call = service.getNewestArticles();
    call.enqueue(new Callback<ArticleResponse>() {
        @Override
        public void onResponse(Call<ArticleResponse> call, Response<ArticleResponse> response) {
            dialog.dismiss();
            generateDataList(response.body().getArticles());
        }

        @Override
        public void onFailure(Call<ArticleResponse> call, Throwable t) {
            Log.w( t );
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...