Picasso ImageError - PullRequest
       24

Picasso ImageError

0 голосов
/ 09 января 2020

Я использую Picasso для показа изображений с сервера в моем приложении android. У меня есть 5 изображений URL (форма HTTP), получаемых с сервера и сохраняющих их в виде значения String. Если я отправляю правильную ссылку на Picasso (.jpg форма), он работает правильно и показывает мое изображение в моем изображении, и если отправить неправильную ссылку в (. PDF формате), он показывает ошибку в моем представлении изображения, но когда я передаю нулевое значение или пустое значение с моего сервера, чтобы строка моего приложения sh выполняется сначала оператор if, даже если его значение равно null или пусто, иначе оператор not выполняется, что я должен обновить в своем коде, чтобы, если я получаю нулевое значение с сервера, должно отображаться мое изображение, а значение ошибки и текстового представления должно быть изменено .

// Код только там, где мой If / Else Start:

    if (image_fourth != null && image_fourth != ""){
        Picasso.get().load(image_fourth).resize(200, 200).placeholder(R.drawable.placeholder).error(R.drawable.error).into(image1);
        image1.setVisibility(View.VISIBLE);

        buttons.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (image_second == null){
                    image_2t.setText("Image Not Found");
                    image_2t.setVisibility(View.GONE);


                }
                else if (image_second != null){
                    Picasso.get().load(image_second).resize(200, 200).placeholder(R.drawable.placeholder).error(R.drawable.error).into(image2);
                    image2.setVisibility(View.VISIBLE);
                    image_2t.setText("Image 2");
                    image_2t.setVisibility(View.VISIBLE);
                }
            }
        });
    }
    else{
        image_1t.setText("Image Not Found");
    }

Ответы [ 3 ]

3 голосов
/ 09 января 2020

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

Glide.with(activity_context)
                .load(your_url)
                .placeholder(R.drawable.default_image)
                .error(R.drawable.default_image)
                .override(200, 200)
                .centerCrop()
                .dontAnimate()
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(mHolder.imgIcon); 

, вы можете найти больше информации о Glide здесь

, если вы хотите продолжить с Picasso, попробуйте этот код, это может помочь вам

if(!TextUtils.isEmpty(Url)) {

            Picasso.with(activity).load(Url.replace(" ", "%20")).error(R.drawable.default_image).networkPolicy(NetworkPolicy.NO_CACHE)
                    .memoryPolicy(MemoryPolicy.NO_CACHE)

                    .into(imageView, new Callback() {

                        public void onSuccess() {
                            System.out.println(" 02062015:onSuccess");


                        }

                        @Override
                        public void onError() {
                            imageView.setImageResource(R.drawable.default_image);
                            System.out.println(" 02062015:onError");

                        }
                    });
        }
2 голосов
/ 09 января 2020

Вы можете попробовать изменить оператор if / else. Пикассо, насколько я знаю, не может принимать пустую или пустую строку в load (). В вашем случае оператор if может охватывать, если источник строки / URL-адреса имеет значение null, вы можете загрузить заполнитель:

    if (url == null || url.isEmpty()) {
    Picasso.with(context).load(placeholder).transform(transformation).into(this)
} else {
    Picasso.with(context).load(url).error(placeholder).transform(transformation)
            .placeholder(placeholder).into(this)
}

Другой вариант может состоять в том, чтобы сохранить оператор if таким, какой он есть, но добавить его в оператор else. :

else
        image_fourth.setImageResources(R.mipmap.ic_launcher);

Я использовал подобные методы с Glide. Это сработало для меня. Для получения дополнительной информации вы можете проверить ответ на этот стек: Пикассо не переносит пустой строковый URL?

0 голосов
/ 09 января 2020

Просто переключайтесь между утверждениями и проверьте, работает ли он?

if (image_fourth == null || image_fourth == ""){
//write your else statement here
}else{
//And if code is here
}
...