Android-də Şəbəkə Sorğuları 2-ci Hissə : Volley və OkHttp

Sabuhi Talibli
Aug 25, 2017 · 3 min read

Keçən yazımda android-də şəbəkə sorğuları üçün android SDK-nın bizə verdiyi hazır APİ, onun mənfi cəhətləri və nəyə görə android proqramçıların digər alternativlərdən istifadə etikləri haqqında yazmışdım. Həmin problemlərin həllində open-source ( açıq qaynaqlı ) kitabxanalar bizə köməyə gəlir. Lakin, bu zaman da biz digər bir problemlə qarşılarırıq. Bu qədər kitabxanalar içərisindən hansını istifadə edək. Çünki bir tərəfdə hansısa konkret bir problemin həlli üçün olan kitabxanalar var, digər tərəfdə isə şəbəkə sorğuları ilə bağlı müxtəlif halları nəzərə alan kitabxanalar.

HTTP səviyyəsində sorğuların idarə olunması üçün istifadə olunan 2 əsas kitabxana var:

  • Volley
  • OkHTTP

Volley

Volley, rahat və sürətli şəbəkə sorğuları göndərmək üçün Google tərəfindən hazırlanmış və 2013-cü ildə Google I/O konfransında təqdim edilmiş kitabxanadır. Bu kitabxana daha rahat REST sorğular göndərmək, şəkil yükləmək üçün http client funksiyasını yerinə yetirir. Məlumat yükləmək, cache və thread əlaqəli əməliyyatlar, sinxronizasiya kimi məsələləri həll edir.

Volley-in hazırlanmasına əsas səbəb əvvəllər android SDK-da şəbəkə sorğuları üçün ancaq Java-nın java.net.HttpURLConnection və Apache-nin org.apache.http.client klaslarının olması idi. Hər iki klas andoid platformunun təməl kitabxanaları olmadıqları üçün UI ilə işləmək, şəkil yükləmək, sorğuları cache-ləmək və sadə http sorğu göndərməyin kənarına çıxan digər əməliyyatlar üçün əlavə kod yazmalı idik. Lakin Volley ilə işləyəndə əsas thead-ə məlumat ötürmək, görünüşü dəyişmək üçün heç bir əlavə koda ehtiyac qalmır. Həmçinin, Volley özü bütün sorğular asinxron həll edir və buna görə də AsyncTask klası ilə işləməyimizə ehtiyac qalmır.

Volley-i proyektə daxil etməyin ən asan yolu app modulunda build.gradle faylına aşağıdakı sətri əlavə etməkdir.

dependencies {
...
compile 'com.android.volley:volley:1.0.0'
}

Volley əsasən RequestQueue Request adlı 2 klasla işləyir. İlk öncə RequestQueue obyektini yaradırıq, hansı ki, worker thread-ləri idarə edir və nəticəni sonra əsas thread-ə ötürür. Daha sonra ona bir vəya bir neçə Request obyektini ötürürük.

Volley 3 sorğu növünü dəstəkləyir:

  • String tipli məlumat üçün StringRequest
  • Şəkil yükləmək üçün ImageRequest
  • Json tipli məlumat üçün JsonObjectRequest JsonArrayRequest
RequestQueue queue = Volley.newRequestQueue(context);String url = “http://api.example.com/data";// Request a string response
StringRequest request = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// Handle Response
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// Handle Error
}
});
// Set the tag on the request
request.setTag(TAG);
queue.add(request);

Request obyektlərini əlavə etdikdən sonra Volley onları icra edəcək.

Sorğuları ləğv etmək üçün sadəcə cancelAll() metodunu çağırırıq:

// To cancell all requests
queue.cancelAll();
// To cancel specific requests
queue.cancelAll(TAG);

Göründüyü kimi Volley ilə işləmək olduqca rahat, yazdığımız kod isə daha təmiz və səliqəlidi. Volley haqda daha detallı oxumaq üçün keçid.

OkHTTP

OkHttp digər maraqlı açıq qaynaqlı kitabxanadır. Bu kitabxanın veb səhifəsindən nələri edə bildiyini oxuduqca başa düşürsən ki, şəbəkə sorğuları nə dərəcədə mürəkkəb bir əməliyyatdır. OkHttp artıq təməldən heç bir əlavə REST kitabxanaya( Məs: Retrofit ) ehtiyac olmadan olduqca rahat və bacarıqlı kitabxanadır. Belə ki, OkHttp-ni proyektimizə daxil etməklə bir neçə kitabxanın gördüyü işi bir kitabxana ilə həll edirik.

dependencies {
...
compile 'com.squareup.okhttp3:okhttp:3.8.1'
}

Bu kitabxananın əsas klası OkHttpClient-dır. GET sorğusuna nümunə olaraq:

String url = “http://api.example.com/data";OkHttpClient client = new OkHttpClient();Request request = new Request.Builder().url(url).build();client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
// Handle Error
}

@Override
public void onResponse(Call call, Response response) throws IOException {
// Handle Response
}
});

POST sorğusu göndərmək üçün ilk öncə sorğu tipini təyin edirik:

public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");

Daha sonra sorğunun body hissəsində nə göndərəcəyimiz təyin edib sorğunu göndəririk:

RequestBody body = RequestBody.create(JSON, "{'key' : 'value'}");String url = “http://api.example.com/data";OkHttpClient client = new OkHttpClient();Request request = new Request.Builder().url(url).post(body).build();client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
// Handle Error
}

@Override
public void onResponse(Call call, Response response) throws IOException {
// Handle Response
}
});

Nəticə

Göründüyü kimi hər iki kitabxana ilə rahat, səliqəli kod yaza bilərik. Hər ikisinin də çox yaxşı sənədləşməsi və geniş istifadəçi kütləsinin olması, çıxa biləcək hər hansısa problemin həllinin asanlıqla internetdə tapılmasını mümkün edir. Buna görə də həm Volley, həm də OkHttp gələcək proyektlərdə ürək rahatlığlı ilə istifadə oluna bilər.

)
Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade