Как настроить логику для модернизации, чтобы пропустить загрузку, если запрос возвращает 404? - PullRequest
0 голосов
/ 05 апреля 2019

Я новичок в разработке для Android.

Мое приложение использует Hearthstone API. Hearthstone - карточная онлайн-игра.

API возвратит URL-адрес изображения карты вместе с другими строками информации, такими как имя карты и информация о карте.

к сожалению, API вернет URL, который достигает 404, поэтому изображение никогда не отображается.

Если интересно, вот GIT с моим кодом https://github.com/KaasiSerrano/HearthstoneAPI

Я хотел бы реализовать логику, которая будет пропускать загрузку всего, что не возвращает правильный URL-адрес изображения карты.

https://imgur.com/a/H21oHeP

Я ищу что-то вроде этого

if(url == [404])
{
   skip loading this card and skip to the next card to check if that one has a proper URL or not
}

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

public void retrofitRequest() {

            HearthstoneService hearthstoneService =
                    RetrofitClientInstance
                            .getRetrofit()
                            .create(HearthstoneService.class);


 Call<List<Cards>> call = hearthstoneService.loadSetCards(ThisIsSetName);


            call.enqueue(new Callback<List<Cards>>() {
                @Override
public void onResponse(Call<List<Cards>>call,Response<List<Cards>> response) {

                    if (response.isSuccessful()) {
                        assert response.body() != null;

                        Log.d(TAG, "onResponse" + response.body());


                        cardAdapter.setData(response.body());
                        rvCards.setAdapter(cardAdapter);


                    } else {
                        assert response.errorBody() != null;
                        Log.d(TAG, "onResponseError" + response.errorBody().toString());
                        Toast.makeText(DisplaySetCards.this, "Card Doesn't exist", Toast.LENGTH_SHORT).show();

                    }
                }


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

        }

Я использую Glide для загрузки этих изображений, но я думаю, что код, который я ищу, должен произойти до того, как я загружу изображения? Я не уверен. https://imgur.com/a/H21oHeP

 Glide.with(context).load(urlGolden).placeholder(R.drawable.error404card).into(holder.iv_Card_Image);

На выходе должны быть только карточки с реальным URL-адресом.

1 Ответ

0 голосов
/ 10 апреля 2019

Вы можете сделать что-то вроде этого. Прикрепите слушателя загрузки изображений для скольжения и, если возникнут исключения, удалите этот элемент из списка.

Glide.with(context)
            .load(url)
            .placeholder(R.color.Black)
            .diskCacheStrategy(DiskCacheStrategy.RESULT)
            .dontAnimate()
            .listener(new RequestListener<String, GlideDrawable>() {
                @Override
                public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {

                   // HERE remove that item from the list

                    Log.d(TAG,e.getLocalizedMessage(),e);
                    return false;
                }

                @Override
                public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                    return false;
                }
            })
            .into(imageView);
...