Я использую библиотеку, чтобы легко получить новости с newsapi.org
implementation 'com.github.KwabenBerko:News-API-Java:1.0.0'
Библиотека работала один раз, на самом деле я загрузил новости впервые ... и с тех пор больше никогда.Это не проблема интернета, так как мое приложение работает в Интернете, а все остальное работает нормально.Так что моя проблема в том, как я могу найти то, что не так?В logcat я получил сообщение для адаптера recycleview, потому что оно пустое (нет данных для отображения), поэтому это сообщение не помогает.Код, который я использую:
private void setupNews() {
if(newsArticles.size() != 50) {
NewsApiClient newsApiClient = new NewsApiClient(getString(R.string.feednews_api_key));
newsApiClient.getEverything(
new EverythingRequest.Builder()
.q("Fitness")
.pageSize(50)
.language("en")
.build(),
new NewsApiClient.ArticlesResponseCallback() {
@Override
public void onSuccess(ArticleResponse articleResponse) {
for (int i = 0; i < 50; i++) {
newsArticles.add(new NewsArticle(articleResponse.getArticles().get(i).getTitle(),
articleResponse.getArticles().get(i).getDescription(),
articleResponse.getArticles().get(i).getPublishedAt(),
articleResponse.getArticles().get(i).getSource().getName(),
articleResponse.getArticles().get(i).getUrlToImage(),
articleResponse.getArticles().get(i).getUrl()));
}
RecyclerView newsRecycler = findViewById(R.id.news_articles_list);
Log.d(TAG, "setup: " + newsArticles.size());
ViewCompat.setNestedScrollingEnabled(newsRecycler, false);
newsRecycler.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
RecyclerView.Adapter adapter = new NewsAdapter(newsArticles, getApplicationContext());
newsRecycler.setLayoutManager(layoutManager);
newsRecycler.setAdapter(adapter);
mProgressBar.setVisibility(View.GONE);
}
@Override
public void onFailure(Throwable throwable) {
Log.d(TAG, "onFailure: " + throwable);
System.out.println(throwable.getMessage());
mProgressBar.setVisibility(View.GONE);
mCheckNewsRecieved.setVisibility(View.VISIBLE);
}
}
);
Я проверил 2 разных ключа, поэтому, вероятно, нет проблем с ключом.Я проверил все в адаптере Recycleview и держателе просмотра.Я прочитал все сообщения об ошибке E/RecyclerView: No adapter attached; skipping layout
, которую я получил в logcat, так что я почти убежден, что я не получаю данные с newsapi.org.Так что мои вопросы, когда у меня заканчиваются идеи, как я могу отладить такую проблему?
ОБНОВЛЕНИЕ: Я публикую адаптер повторного просмотра на всякий случай
public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> {
private final ArrayList<NewsArticle> mNewsArticle;
private final Context mContext;
public NewsAdapter(ArrayList<NewsArticle> mNewsArticle, Context mContext) {
this.mNewsArticle = mNewsArticle;
this.mContext = mContext;
}
@Override
public NewsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_articles, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(NewsAdapter.ViewHolder holder, int position) {
holder.articleDesc.setText(mNewsArticle.get(position).getArticleDesc());
holder.articleName.setText(mNewsArticle.get(position).getArticleName());
holder.articleURL.setText(mNewsArticle.get(position).getArticleURLName());
holder.articleDate.setText(dateConfiguration(mNewsArticle.get(position).getArticleDate()));
Log.d(TAG, "onBindViewHolder: " + mNewsArticle.get(position).getArticleURLName());
Picasso
.with(mContext)
.load(mNewsArticle.get(position).getArticleImageURL())
.resize(380, 200)
.into(holder.articleImage);
holder.itemView.setOnClickListener(v -> IntentUtils.invokeToURL(mContext, mNewsArticle.get(position).getArticleURLLink()));
}
@Override
public int getItemCount() {
return mNewsArticle.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView articleName;
private TextView articleDesc;
private TextView articleURL;
private ImageView articleImage;
private TextView articleDate;
public ViewHolder(View itemView) {
super(itemView);
articleName = itemView.findViewById(R.id.article_title);
articleDesc = itemView.findViewById(R.id.article_desc);
articleImage = itemView.findViewById(R.id.article_image);
articleURL = itemView.findViewById(R.id.article_url);
articleDate = itemView.findViewById(R.id.article_date);
}
}
public String dateConfiguration(String Date) {
return Date.replace("T", " ").replace("Z", "");
}
ОБНОВЛЕНИЕ: После проверки newsapi.org этоесть мои запросы.Странно то, что в эмуляторе работали onced, но теперь, даже если я стираю данные, делаю недействительной кеш и т. Д., Статьи все еще загружаются (старые).В физическом устройстве я получил сообщение mCheckNewsRecieved.setVisibility(View.VISIBLE);
, как будто оно не удалось.