Picasso ImageError

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

// Код только там, где мой 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");
    }

person Sunny    schedule 09.01.2020    source источник
comment
какой тип ошибки возникает?   -  person Bharat Vankar    schedule 09.01.2020
comment
@BharatVankar, если моя строка равна нулю, ее ошибка точки в строке Picasso.get (). Load (image_fourth) .resize (200, 200) .placeholder (R.drawable.placeholder) .error (R.drawable.error) .into ( image1);   -  person Sunny    schedule 09.01.2020


Ответы (3)


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

    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. У меня это сработало. Для получения дополнительной информации вы можете проверить этот ответ stackoverflow: Пикассо не допускает пустой строковый URL-адрес? < / а>

person Adam391    schedule 09.01.2020
comment
К сожалению, я мало знаю о Volley, поэтому не уверен, что смогу помочь вам с этим следующим. - person Adam391; 13.01.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 можно найти здесь

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

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");

                        }
                    });
        }
person Sharon Joshi    schedule 09.01.2020

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

if (image_fourth == null || image_fourth == ""){
//write your else statement here
}else{
//And if code is here
}
person Deva GAikwad    schedule 09.01.2020