- Использование библиотеки Volley в Android на примере получения данных из погодного API
- hitraj47 / AppController.java
- Лучший способ включить Volley (или другую библиотеку) в проект Android Studio
- Чтобы установить залп из источника, прочитайте ниже:
- В настоящее время
- Много разных способов сделать это за день (исходный ответ)
Использование библиотеки Volley в Android на примере получения данных из погодного API
Каждому Android-разработчику рано или поздно приходится работать с сетью. В Android есть множество библиотек с открытым исходным кодом, таких как Retrofit, OkHttp или, например, Volley, на которой мы сегодня остановимся подробнее.
Итак, что же эта библиотека из себя представляет?
Volley — это HTTP-библиотека, которая упрощает и ускоряет работу в сети для приложений Android.
Код библиотеки на GitHub .
Итак, для начала работы с Volley нам необходимо добавить её в build.gradle(module:app):
Также необходимо добавить разрешение на использование интернета в манифесте нашего приложения:
Далее нам понадобится API. В данном туториале я воспользуюсь погодным API с сайта openweathermap.org/api .
Для начала создадим простую разметку для отображения данных, взятых из API (Application programming interface).
Далее заходим в MainActivity и создаем необходимые поля:
Инициализируем созданные поля поля в onCreate:
Теперь подходим к основной теме данного туториала — получение данных из API при помощи библиотеки Volley:
1) В MainActivity создаем метод GetWeather:
для приведения json’а в нормальный вид использован jsonformatter
Стоит заметить, что имена объектов должны быть записаны точно так же, как и в нашем API, иначе они просто не ‘достанутся’.
2) Создаем, непосредственно, метод setValues:
3) Вызываем методы getWeather() и setValues() в onCreate():
Источник
hitraj47 / AppController.java
Volley, Android Studio and Examples
This tutorial is really just some code snippets to show you how to use Volley in Android Studio for your Android project. The tutorial will show you how you can import Volley, an example of retrieving a JSON object and retrieving an image for use in a layout.
Files and Code Snippets
The code snippets that are references should be listed below, after this readme file.
Importing Volley into Android Studio
To import Volley into your project, you have to use a 3rd party mirror or the Volley library. However, it is only 1 line of code. Open your app/build.gradle and add the following dependency:
The first class you will need is a singleton that handles Volley requests. See the AppController code snippet.
Second, you will need an image cache, see the LruBitmapCache code snippet.
Getting a JSON Object or JSON Array
To retrieve a JSON Object, see the code example.
- The code is very similar for JSON arrays
- The TAG variable is just used for Logcat — the response is being made into a string and output into the Logcat console.
- onReponse is where you would do what you need with the returned data
Displaying an Image in NetworkImageView
To display an image, in your layout, you will need a NetworkImageView. This is similar to an ImageView. See the NetworkImageView XML example.
The code to display an image in the NetworkImageView is:
NetworkImageView imageView = (NetworkImageView) findViewById(R.id.image); imageView.setImageUrl(«http://www.website.com/path/to/image.jpg», AppController.getInstance().getImageLoader());
If you would like to set placeholder and error images, see the Placeholder and Error Images code sample.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
import android.app.Application ; |
import android.text.TextUtils ; |
import com.android.volley.Request ; |
import com.android.volley.RequestQueue ; |
import com.android.volley.toolbox.ImageLoader ; |
import com.android.volley.toolbox.Volley ; |
public class AppController extends Application < |
public static final String TAG = AppController . class |
.getSimpleName(); |
private RequestQueue mRequestQueue; |
private ImageLoader mImageLoader; |
private static AppController mInstance; |
@Override |
public void onCreate () < |
super . onCreate(); |
mInstance = this ; |
> |
public static synchronized AppController getInstance () < |
return mInstance; |
> |
public RequestQueue getRequestQueue () < |
if (mRequestQueue == null ) < |
mRequestQueue = Volley . newRequestQueue(getApplicationContext()); |
> |
return mRequestQueue; |
> |
public ImageLoader getImageLoader () < |
getRequestQueue(); |
if (mImageLoader == null ) < |
mImageLoader = new ImageLoader ( this . mRequestQueue, |
new LruBitmapCache ()); |
> |
return this . mImageLoader; |
> |
public T > void addToRequestQueue ( Request T > req , String tag ) < |
// set the default tag if tag is empty |
req . setTag( TextUtils . isEmpty(tag) ? TAG : tag); |
getRequestQueue() . add(req); |
> |
public T > void addToRequestQueue ( Request T > req ) < |
req . setTag( TAG ); |
getRequestQueue() . add(req); |
> |
public void cancelPendingRequests ( Object tag ) < |
if (mRequestQueue != null ) < |
mRequestQueue . cancelAll(tag); |
> |
> |
> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
// Tag used to cancel the request |
String tag_json_obj = » json_obj_req » ; |
String url = » http://www.api.com/your/api/request » ; |
final ProgressDialog pDialog = new ProgressDialog ( this ); |
pDialog . setMessage( » Loading. » ); |
pDialog . show(); |
JsonObjectRequest jsonObjReq = new JsonObjectRequest ( Request . Method . GET , url, null , new Response . Listener JSONObject > () < |
@Override |
public void onResponse ( JSONObject response ) < |
Log . d( TAG , response . toString()); |
pDialog . hide(); |
> |
>, new Response . ErrorListener () < |
@Override |
public void onErrorResponse ( VolleyError error ) < |
VolleyLog . d( TAG , » Error: » + error . getMessage()); |
// hide the progress dialog |
pDialog . hide(); |
> |
>); |
// Adding request to request queue |
AppController . getInstance() . addToRequestQueue(jsonObjReq, tag_json_obj); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
import android.graphics.Bitmap ; |
import android.support.v4.util.LruCache ; |
import com.android.volley.toolbox.ImageLoader.ImageCache ; |
public class LruBitmapCache extends LruCache String , Bitmap > implements |
ImageCache < |
public static int getDefaultLruCacheSize () < |
final int maxMemory = ( int ) ( Runtime . getRuntime() . maxMemory() / 1024 ); |
final int cacheSize = maxMemory / 8 ; |
return cacheSize; |
> |
public LruBitmapCache () < |
this (getDefaultLruCacheSize()); |
> |
public LruBitmapCache ( int sizeInKiloBytes ) < |
super (sizeInKiloBytes); |
> |
@Override |
protected int sizeOf ( String key , Bitmap value ) < |
return value . getRowBytes() * value . getHeight() / 1024 ; |
> |
@Override |
public Bitmap getBitmap ( String url ) < |
return get(url); |
> |
@Override |
public void putBitmap ( String url , Bitmap bitmap ) < |
put(url, bitmap); |
> |
> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
com .android.volley.toolbox.NetworkImageView |
android : id = » @+id/image « |
android : layout_width = » wrap_content « |
android : layout_height = » wrap_content « |
android : layout_alignParentTop = » true « |
android : layout_centerHorizontal = » true »/> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
NetworkImageView imageView = ( NetworkImageView ) findViewById( R . id . image); |
ImageLoader imageLoader = AppController . getInstance() . getImageLoader(); |
imageLoader . get( » http://www.website.com/path/to/image.jpg » , ImageLoader . getImageListener(imageView, R . drawable . ico_loading, R . drawable . ico_error)); |
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Источник
Лучший способ включить Volley (или другую библиотеку) в проект Android Studio
Я видел разные советы по наилучшему способу сделать это Этот вопрос охватывает создание банки. В другом месте, я видел совет, чтобы просто скопировать источник залпа в ваш собственный проект. Этот раздел в библиотеках на android.com выглядит наиболее авторитетным. Однако после компиляции волейбола у меня нет библиотеки aal, тогда как в этом разделе сказано, что я должен был.
Итак, мой вопрос: у меня есть существующий проект Android Studio со стандартным макетом и репозиторий git; что я должен сделать, чтобы добавить залп? Где я должен скачать его? Как добавить его в Android Studio? Какие файлы Gradle, если есть, мне нужно изменить.
Надеюсь, для тех из вас, кто сделал это несколько раз, это должно быть хлебное масло, но я не смог найти простого описания.
Обновление, на предложение Скотта Барты.
Файл gradle.build в репозитории волейбола имеет эту строку.
Согласно документации: “Проекты библиотеки не генерируют APK, они генерируют пакет .aar(который представляет собой архив Android).” Однако, когда я создаю проект волейбола, не создается .aar.
Я чувствую, что, поскольку Volley – это проект библиотеки, созданный командой Android, скорее всего, он предназначен для создания и использования в качестве пакета .aar. Любые советы о том, было бы предпочтительнее генерировать .aar и как это сделать, будут оценены.
ПОСЛЕДНЕЕ ОБНОВЛЕНИЕ:
Используйте официальную версию из jCenter вместо этого.
Зависимости ниже указывают на устаревший залп, который больше не поддерживается.
ОРИГИНАЛЬНЫЙ ОТВЕТ
Вы можете использовать это в разделе зависимости вашего файла build.gradle для использования volley
ОБНОВЛЕНО:
Не официальная, а зеркальная копия официального Volley. Он регулярно синхронизируется и обновляется официальным репозиторием Volley, поэтому вы можете использовать его без каких-либо проблем.
Добавьте эту строку в свои зависимости gradle для волейбола:
Чтобы установить залп из источника, прочитайте ниже:
Мне нравится держать официальный репозиторий в моем приложении. Таким образом, я получаю это из официального источника и могу получать обновления, не зависимо от кого-либо, и смягчать проблемы, выраженные другими людьми.
Добавлен залп как субмодуль рядом с приложением.
В моих настройках .gradle добавлена следующая строка, чтобы добавить залп в качестве модуля.
В моем приложении /build.gradle я добавил зависимость компиляции для проекта волейбола
Это все! Теперь волейбол можно использовать в моем проекте.
Каждый раз, когда я хочу синхронизировать модуль волейбола с репо Google, я запускаю его.
В настоящее время
Много разных способов сделать это за день (исходный ответ)
Добавить volley.jar в качестве библиотеки
Использовать исходные файлы из git (более ручной/общий способ, описанный здесь)
- Загрузите/установите клиент git (если он еще не установлен в вашей системе): http://git-scm.com/downloads
(или через git clone https://github.com/git/git … sry плохой, но не смог устоять ^^) - Выполнить git clone https://android.googlesource.com/platform/frameworks/volley
- Скопируйте папку com из [path_where_you_typed_git_clone]/volley/src в ваши проекты app/src/main/java (вместо этого интегрируйте ее, если у вас уже есть папка com!!; -))
Файлы сразу появляются в Android Studio. Для Eclipse вам нужно right-click в папке src и сначала нажать refresh (или F5 ).
Используйте gradle через “неофициальное” зеркало maven
В файле проекта src/build.gradle добавьте следующую зависимость зала:
Нажмите Try Again , который должен сразу появиться в верхней части файла, или просто Build , если не
Основным “преимуществом” здесь является то, что это позволит обновить версию для вас, тогда как в двух других случаях вам придется вручную обновлять залп.
В “нижней части” это официально не из Google, а в стороннее еженедельное зеркало.
Но оба эти пункта действительно соответствуют тому, что вам нужно/нужно.
Также, если вы не хотите обновлений, просто поместите туда желаемую версию, например, например. compile ‘com.mcxiaoke.volley:library:1.0.7’ .
На сегодняшний день в JCenter есть официальная версия Volley, размещенная на Android, которая находится в JCenter:
Это было скомпилировано из исходного кода волейбола AOSP.
СТАРЫЙ ОТВЕТ:
Вам нужно следующее в вашем build.gradle вашего модуля приложения:
Это не официальное репо, а очень надежное.
Для включения залпа в андроид-студию,
Обратитесь к разработчику Android для этого.
Он создаст имя папки volley в каталоге src.
переключитесь на Android-представление и откройте файл сборки: gradle (Module: app) и добавьте следующую строку в области зависимостей:
compile ‘com.mcxiaoke.volley: library-aar: 1.0.0’
Теперь синхронизируйте свой проект, а также создайте свой проект.
Я создал Volley как отдельный проект. Таким образом, он не привязан к какому-либо проекту и существует независимо.
У меня также есть настройка сервера Nexus (внутренняя репо), поэтому я могу получить доступ к волейболу
compile ‘com.mycompany.volley: volley: 1.0.4’ в любом проекте, который мне нужен.
Всякий раз, когда я обновляю проект Volley, мне просто нужно изменить номер версии в других проектах.
Источник