Как увидеть, когда информация теряется, используя API и Glide для изображений - PullRequest
0 голосов
/ 20 июня 2019

Я настраиваю новостное приложение типа NewYorkTimes (используя их API) для школы.У меня есть 3 вкладки для каждой категории («Главные новости», «Самые популярные», «Искусство»). Каждая вкладка представляет собой фрагмент, связанный с MainActivity, и мы можем переключаться между фрагментами с помощью ViewPager.Каждый фрагмент содержит RecyclerView.(для списка статей) Я использую Retrofit и Glide.Вот мой репозиторий на github, если хотите: https://github.com/matteovaccari/MyNews Я успешно реализовал Article API, но у меня возникли проблемы с использованием Glide, вот моя проблема: отображаются не все изображения (отображаются почти 8 изображений / 10) ив MostPopular Tab это 0/10 изображений

Я думаю, что моя проблема связана с моим методом SetImage:

 public void setArticleImage(Result article, RequestManager glide) {
    //If article url isn't null
    if (article.getMultimedia() != null) {
        if (article.getMultimedia().size() > 0) {
            // get image string
            String urlMultimedia = article.getMultimedia().get(0).getUrl();
            // clean the URL
            if (urlMultimedia.startsWith("images")) {
                urlMultimedia = "https://www.nytimes.com/" + urlMultimedia;
            }
            glide.load(urlMultimedia).apply(new RequestOptions().fallback(R.drawable.ic_launcher_background)).into(imageView);
        } else {
            // default image
            getImageDefault(glide);
        }
    } else {

        if (article.getMedia() == null) {
            //image default
            getImageDefault(glide);
        } else {
            // get Url
            String mUrlMedia = article.getMedia().get(0).getMediaMetadata().get(0).getUrl();
            // glide the string
            glide.load(mUrlMedia).apply(new RequestOptions().fallback(R.drawable.ic_launcher_background)).into(imageView);
        }
    }
}

Этот метод вызывается в моем методе updateUI (с setTitle, setSection и т. д.)

Я не понимаю, как некоторые изображения могут быть загружены, а некоторые нет ... То же самое для вкладки MostPopular, которая ничего не загружает

1 Ответ

0 голосов
/ 20 июня 2019

Проблема с вашим ответом API .Некоторые из ваших изображений не загружаются, потому что в некоторых случаях ваше состояние if (article.getMultimedia() != null) не выполняется.В этих случаях multimedia вообще не существует в ответе API и, следовательно, у него нет imageUrl и, следовательно, загружается изображение-заполнитель по умолчанию .

public void setArticleImage(Result article, RequestManager glide) {
    //This condition is FAILING for you because article doesn't have multimedia object inside it.
    if (article.getMultimedia() != null) {
        if (article.getMultimedia().size() > 0) {
            // get image string
            String urlMultimedia = article.getMultimedia().get(0).getUrl();
            // clean the URL
            if (urlMultimedia.startsWith("images")) {
                urlMultimedia = "https://www.nytimes.com/" + urlMultimedia;
            }
            glide.load(urlMultimedia).apply(new RequestOptions().fallback(R.drawable.ic_launcher_background)).into(imageView);
        } else {
            // default image
            getImageDefault(glide);
        }
    } else {

        if (article.getMedia() == null) {
            //image default
            getImageDefault(glide);
        } else {
            // get Url
            String mUrlMedia = article.getMedia().get(0).getMediaMetadata().get(0).getUrl();
            // glide the string
            glide.load(mUrlMedia).apply(new RequestOptions().fallback(R.drawable.ic_launcher_background)).into(imageView);
        }
    }
}

Вы должны попросить разработчика исправить ответ API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...