Je développe une application Android d'actualités sportives, mais lorsque je l'exécute, elle affiche un écran blanc capture d'écran de emulator .
sous ma classe d'adaptateur
classe publique ArticleAdapter étend RecyclerView.Adapter {
{ "status": "ok", "totalResults": 10, "articles": [ { "source": { "id": "bbc-sport", "name": "BBC Sport" }, "author": "BBC Sport", "title": "Gordon Taylor: PFA chief executive set to step down after 38 years", "description": "Gordon Taylor to announce he will step down as chief executive of the Professional Footballers' Association (PFA) at the end of the season after 38 years.", "url": "http://www.bbc.co.uk/sport/football/47691299", "urlToImage": "https://ichef.bbci.co.uk/onesport/cps/624/cpsprodpb/13590/production/_97584297_breaking_news.png", "publishedAt": "2019-03-27T13:04:18Z", "content": "Gordon Taylor is set to announce he is standing down as chief executive of the Professional Footballers' Association after 38 years in the role.\r\nIt follows a mutiny from PFA chairman Ben Purkiss and former players over governance issues and controversy over ⦠[+675 chars]" }, ] }
}
sous la classe d'interface Retrofit interface publique SportInterface {
@SerializedName("status") @Expose private String status; @SerializedName("totalResults") @Expose private Integer totalResults; @SerializedName("articles") @Expose private List<Article> articles = null; public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public Integer getTotalResults() { return totalResults; } public void setTotalResults(Integer totalResults) { this.totalResults = totalResults; } public List<Article> getArticles() { return articles; } public void setArticles(List<Article> articles) { this.articles = articles; }
}
ci-dessous le client de rénovation
classe publique SportClient {
private SportNews sportNews; private List<Article> articleList; private ArticleAdapter articleAdapter; @BindView(R.id.recyclerView) RecyclerView recyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); SportInterface sportInterface = SportClient.getApiService(); Call<SportNews> call = sportInterface.getArticles(); call.enqueue(new Callback<SportNews>() { @Override public void onResponse(Call<SportNews> call, Response<SportNews> response) { sportNews = response.body(); articleAdapter = new ArticleAdapter( articleList, sportNews); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext()); recyclerView.setLayoutManager(layoutManager); recyclerView.setAdapter(articleAdapter); } @Override public void onFailure(Call<SportNews> call, Throwable t) { } }); }
3 Réponses :
votre problème est dans cette ligne
articleList=sportNews.getArticles(); articleAdapter = new ArticleAdapter( articleList, sportNews);
doit être remplacé par ceci
articleAdapter = new ArticleAdapter( articleList, sportNews);
essayez ceci. Je pense que votre adaptateur est incorrect.
public class ArticleAdapter extends RecyclerView.Adapter<ArticleAdapter.CustomViewHolder> {
Bonjour, copiez simplement le code ci-dessous, car j'ai modifié votre classe MainActivity où vous avez oublié d'ajouter une liste à partir de l'objet sportNews auquel vous pouvez accéder en réponse à l'appel de l'API.
public class MainActivity extends AppCompatActivity { private SportNews sportNews; private List<Article> articleList = new ArrayList<Article>(); private ArticleAdapter articleAdapter; @BindView(R.id.recyclerView) RecyclerView recyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); SportInterface sportInterface = SportClient.getApiService(); Call<SportNews> call = sportInterface.getArticles(); call.enqueue(new Callback<SportNews>() { @Override public void onResponse(Call<SportNews> call, Response<SportNews> response) { sportNews = response.body(); if(sportNews != null && sportNews.getArticles() != null){ articleList.addAll(sportNews.getArticles()); } articleAdapter = new ArticleAdapter( articleList, sportNews); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext()); recyclerView.setLayoutManager(layoutManager); recyclerView.setAdapter(articleAdapter); } @Override public void onFailure(Call<SportNews> call, Throwable t) { } }); } }
Connectez
onFailure
et vérifiez si vous recevez quelque chose@HB avez-vous d'autres suggestions
Que voulez-vous dire par d'autres suggestions? Avez-vous vérifié
onFailure
?