Как использовать библиотеку загрузчика изображений Picasso в Android?

Опубликовано: 14 Июля, 2021

Picasso - это программа с открытым исходным кодом и одна из широко используемых библиотек для загрузки изображений в Android. Его создает и поддерживает Square. Это одна из мощных библиотек для загрузки и кеширования изображений для Android. Picasso упрощает процесс загрузки изображений с внешних URL-адресов и отображает их в вашем приложении. Например, загрузка изображения с сервера - одна из самых распространенных задач в любом приложении. И для достижения этого с помощью сетевого API Android требуется гораздо больший объем кода. Используя Picasso, вы можете добиться этого с помощью нескольких строк кода.

Как использовать библиотеку Picasso для Android?

Шаг 1. Создайте пустой проект действия

Создайте пустой проект Android Studio Activity. Обратитесь к Android | Как создать / запустить новый проект в Android Studio? чтобы узнать, как создать пустой проект Android Studio. Обратите внимание, что выберите Java в качестве языка программирования.

Шаг 2. Добавление необходимой зависимости в файл Gradle на уровне приложения

Для использования Picasso в проекте Android мы должны добавить зависимость в файл градиента уровня приложения. Итак, для добавления зависимости откройте файл app / build.gradle в папке приложения в вашем проекте Android и добавьте в него следующие строки. Добавьте эти строки в зависимости {}.

implementation ‘com.squareup.picasso:picasso:2.5.2’ 

Обратитесь к следующему изображению, если не удается найти файл gradle на уровне приложения и вызвать зависимость.

Теперь нажмите кнопку «Синхронизировать сейчас» . Чтобы Android Studio загрузила необходимые файлы зависимостей. Если вы получили ошибку любого типа, вы можете проверить ее в stackoverflow.

Шаг 3: Работа с файлом манифеста

Теперь добавьте InternetPermission в файл AndroidManifest.xml. Откройте файл manifest.xml и добавьте следующую строку.

<users-permission android:name=”android.permission.INTERNET”/>

Шаг 4. Работа с файлом activity_main.xml

Откройте файл макета для файла activity_main.xml. Нам нужно добавить ImageView в основной макет приложения.

XML




<? xml version = "1.0" encoding = "utf-8" ?>
< RelativeLayout
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:background = "@color/colorAccent"
tools:context = ".MainActivity" >
< ImageView
android:id = "@+id/imageView"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_alignParentTop = "true"
android:layout_centerHorizontal = "true"
android:padding = "16dp" />
</ RelativeLayout >

Шаг 5: Работа с файлом MainActivity.java

Теперь перейдите к файлу MainActivity.java и добавьте следующий блок кода. В первой строке мы получаем экземпляр ImageView из макета. Затем загрузите изображение с удаленного URL-адреса, указанного в коде JAVA, с помощью библиотеки Picasso.

Ява




import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import com.squareup.picasso.Picasso;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView = findViewById(R.id.imageView);
Picasso.with( this )
.into(imageView);
}
}

Выход:

Note: Make sure the mobile device or Android Emulator has the network connectivity to load the image.

Дополнительные функции библиотеки Пикассо

Для любого приложения реального времени мы должны продумать все возможные случаи. В приведенном выше коде мы просто загружаем изображение по ссылке на сервере. Но как отобразить это изображение в приложении, как изменить его размер и что, если загрузка изображения не удалась? Нам нужно другое изображение, показывающее сообщение об ошибке, что загрузка изображения не удалась. Все это важно для разработчика приложений. Следующие изменения кода внесены в файл MainActivity.java.

1) Изменить размер

Здесь мы используем Picasso для получения удаленного изображения и изменения его размера перед отображением в ImageView .

Ява




import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import com.squareup.picasso.Picasso;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView = findViewById(R.id.imageView);
Picasso.with( this )
.resize( 300 , 300 )
.into(imageView);
}
}

Выход:

2) Заполнитель

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

Ява




import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import com.squareup.picasso.Picasso;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView = findViewById(R.id.imageView);
Picasso.with( this )
.placeholder(R.mipmap.ic_launcher)
.into(imageView);
}
}

Выход:

3) Возврат к ошибке

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

Note: To see this result uninstall the previously loaded application and then install the fresh version of the application from the Android Studio.

Ява




import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import com.squareup.picasso.Picasso;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView = findViewById(R.id.imageView);
Picasso.with( this )
.error(R.drawable.error_gfg)
.into(imageView);
}
}

Выход:

4) Обрезка

Если вы не уверены в размере изображения, загруженного с удаленного сервера, то каким будет размер изображения. Таким образом, в этом фрагменте кода изображение будет обрезано по центру.

Ява




import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import com.squareup.picasso.Picasso;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView = findViewById(R.id.imageView);
Picasso.with( this )
.load( " https://media.geeksforgeeks.org/wp-content/uploads/20210101144014/gfglogo-300x300.png " ) // Equivalent of what ends up in onBitmapLoaded
.placeholder(R.mipmap.ic_launcher)
.error(R.drawable.error_gfg)
.centerCrop()
.fit()
.into(imageView);
}
}

Выход:

Устранение неполадок при загрузке изображения с помощью библиотеки Picasso

OutOfMemoryError Ошибки загрузки

Если изображение или набор изображений не загружаются, обязательно проверьте журнал монитора Android в Android Studio. Есть большая вероятность, что вы увидите ошибку java.lang.OutOfMemoryError «Не удалось выделить […] байтов с […] свободными байтами» или Out of memory при выделении 51121168 байтов . Это довольно часто и означает, что вы загружаете одно или несколько больших изображений, размер которых не был изменен должным образом.

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

  1. Добавьте явную ширину или высоту в ImageView, установив layout_width = 500dp в файле макета, а затем обязательно вызовите fit () во время загрузки: Picasso.with (…) .load (imageUri) .fit (). Into (… )
  2. Откройте статические изображения-заполнители или изображения ошибок и убедитесь, что их размеры относительно небольшие (ширина <500 пикселей). Если нет, измените размер этих статических изображений и сохраните их обратно в свой проект.
  3. Попробуйте удалить android: adjustViewBounds = ”true” из вашего ImageView, если он присутствует, и если вы вызываете .fit () вместо использования .resize (width, height)
  4. Вызовите .resize (width, height) во время загрузки Picasso и явно установите ширину или высоту для изображения, например:
    Picasso.with (…) .load (imageUri) .resize (500, 0) .into (…). При передаче 0 автоматически вычисляется правильная высота.

Ссылка: https://github.com/square/picasso