java.lang.IllegalArgumentException: путь не должен быть пустым в Picasso

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

String imageStringUrl = md.Image;

Строка изображения содержит http://example.com/image.jpg

Я прохожу в Пикассо, как показано ниже.

Picasso.get()
.load(imageStringUrl)
.into(iview);                                                           

Когда я прохожу так, я получаю java.lang.IllegalArgumentException: путь не должен быть пустым. Я попробовал вышеуказанный шаг, как показано ниже, но изображение не загружается.

Picasso.get()
.load(new File(imageStringUrl))
.into(iview);

Что не так с приведенным выше заявлением?


person user2269164    schedule 01.03.2016    source источник
comment
Согласно ошибке Image является пустым, а не нулевым. Вы уверены, что у этого есть URL?   -  person Rohit5k2    schedule 01.03.2016
comment
Вам удалось решить эту проблему? Я чувствую, что ни один из ответов ниже не дает правильного ответа   -  person Abhishek    schedule 12.11.2017
comment
Не пытайтесь открыть ссылку. Это NSFW.   -  person Alexander Zar    schedule 01.12.2017


Ответы (4)


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

if (image.isEmpty()) {
   iview.setImageResource(R.drawable.placeholder);
} else{
    Picasso.get().load(image).into(iview);
  }
person veena    schedule 15.04.2016
comment
это лучший способ сделать еще одну картинку, если данные не загружены, большое спасибо - person Rama Astadipati; 12.07.2018
comment
Проверьте мой ответ, с этим оператором if вы все равно можете получить исключение. - person ozmank; 26.02.2019

Просто проверьте, пуста ли ваша строка URL-адреса, сначала обрезав путь к строке, но не проверяйте, как image.isEmpty(), а с помощью этой проверки:

if (path.trim().length() == 0)

Я проверил код Пикассо, и вот как они проверяют. Для справки вот код из их базы кода:

public RequestCreator load(String path) {
    if (path == null) {
      return new RequestCreator(this, null, 0);
    }
    if (path.trim().length() == 0) {
      throw new IllegalArgumentException("Path must not be empty.");
    }
    return load(Uri.parse(path));
  }
person ozmank    schedule 08.05.2018
comment
Strings.isEmpty работает следующим образом: public inline fun CharSequence.isEmpty(): Boolean = length == 0. Итак, я не думаю, что «обрезать» или нет имеет значение - person Jean-baptiste Valero; 27.11.2019

Я думаю, что ваш md.Image возвращает пустую строку. Поэтому попробуйте напрямую поместить image url в picasso следующим образом:

Picasso.get()
.load(" http://xxx.xxx.com/images/New%20folder/Desert.jpg.")
.into(imageView);

Надеюсь, что это работает.

person HassanUsman    schedule 29.03.2016
comment
такое решение не является полным, мы не всегда знаем ссылку, иногда ссылка находится внутри переменной, поэтому, пожалуйста, попробуйте дать более подробное объяснение - person Firas Chebbah; 25.03.2020

У меня была такая же проблема, но я понял, что допустил простую ошибку.

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

imagemRef.getDownloadUrl().addOnCompleteListener(new OnCompleteListener<Uri>() {
   @Override
   public void onComplete(@NonNull Task<Uri> task) {
    Uri url = task.getResult();
    
   urlImagemSelecionada = url.toString(); // This line I have forgot
   }
});

Итак, сообщение java.lang.IllegalArgumentException: Path must not be empty in Picasso было представлено. Потому что параметр действительно был пуст.

Что-то простое, из-за чего я потерял 1 час. Но, к счастью, теперь это разрешилось.

person Adriano Leite da Silva    schedule 22.04.2021