manba

Retrofit — tarmoq so’rovlarini yaratish va boshqarishning eng qulay usuli

Retrofit — tarmoq so’rovlarini yaratish va boshqarishning eng qulay usuli

Ushbu maqolada biz Retrofit haqida gaplashamiz.

Retrofit nima?

Retrofit — bu Square tomonidan ishlab chiqilgan Android, Java va Kotlin uchun tarmoq o'rnatish vazifasida xizmat qiladigan mashhur kutubxonalardan biri hisoblanadi. Ushbu kutubxonaning mashhurlik sabablaridan biri bu retrofitning kompilyatsiya paytida turlarni tekshirib, agar siz o'zgaruvchiga noto'g'ri turni belgilashga harakat qilgan bo'lsangiz, xatolik haqida sizni dastur ishga tushishidan oldin ogohlantirish imkoniga ega ekanligi. Bundan tashqari, REST API-ni mukammal darajada qo'llab-quvvatlaydi, tarmoqdagi so'rovlar va natijalarni osonlikcha tekshira olish imkoniga ham ega.

Kutubxona autentifikatsiya qilish va API bilan o'zaro ishlash va OkHttp bilan tarmoq so'rovlarini yuborish uchun kuchli asosni taqdim etadi. Ushbu kutubxona JSON yoki XML ma'lumotlarini ham API-dan yuklab olishni qolgan kutubxonalarga nisbatan oson amalga oshiradi.

Endi esa yuqorida ta'kidlangan OkHttp haqida biroz ma'lumot berib o'tsam:

  • OkHttpHTTP-ga asoslangan tarmoq so'rovlarini yuborish va qabul qilish uchun Square tomonidan ishlab chiqilgan kutubxona. U Okio kutubxonasining asosiga qurilgan.
  • OkHttp - kutubxonasi aslida HttpUrlConnection interfeysini amalga oshirishni ta'minlaydi.

Xo'sh, retrofitdan qanday foydalanamiz?

Retrofitni dasturga qo'shish

implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation "com.squareup.okhttp3:okhttp:4.9.0"

Konvertor qo'shish

implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

Konvertorni qo'shish bizga JSON ma'lumotlarini (serverdan olingan) java yoki kotlin (model) obyektlarga (POJO) aylantirib beradi.
Bizda buning uchun bir nechta usullar mavjud. Jumladan: GsonConverterFactory, JacksonConverterFactory va SimpleXmlConverterFactory.

Kutubxonani qo'shib olganimizdan so'ng JSON holatiga ko'ra interface yaratib olamiz

JSON:

{
        "status":"success",
        "data":[
        {
        "id":"1",
        "employee_name":"Tiger Nixon",
        "employee_salary":"320800",
        "employee_age":"61",
        "profile_image":""
        },
        {
        "id":"2",
        "employee_name":"Garrett Winters",
        "employee_salary":"170750",
        "employee_age":"63",
        "profile_image":""
        }
        ]
        }

Bizga qaytadigan JSON holatiga ko'ra, biz model ma'lumotlarini va holatini tayyorlab olishimiz kerak. Shunday qilib, biz EmployeeData ma'lumotlarini qaytaradigan getData() metodi bilan birgalikda interface yaratamiz. Bu GET so'rovidir, ya'ni biz ma'lumotni olib kelmoqchimiz. Shuning uchun biz unga @GET annotatsiyasini qo'ydik.

public interface ApiCaller {

    //Ma'lumot olib kelish uchun asosiy URL
    String BASE_URL = "https://dummy.restapiexample.com/api/v1/";

    //Endpoint
    @GET("employees")
    Call<EmployeeData> getData();
}

Model (POJO) class:

public class EmployeeData {
    private Data[] data;

    private String status;

    public Data[] getData() {
        return data;
    }

    public void setData(Data[] data) {
        this.data = data;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }
}

Data class:

public class Data {

    private String id;

    @SerializedName("employee_name")
    private String employeeName;

    @SerializedName("employee_salary")
    private String employeeSalary;


    @SerializedName("employee_salary")
    private String employeAge;
    
    
    @SerializedName("profileImage")
    private String profileImage;

    
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getEmployeeName() {
        return employeeName;
    }

    public void setEmployeeName(String employeeName) {
        this.employeeName = employeeName;
    }

    public String getEmployeeSalary() {
        return employeeSalary;
    }

    public void setEmployeeSalary(String employeeSalary) {
        this.employeeSalary = employeeSalary;
    }

    public String getEmployeAge() {
        return employeAge;
    }

    public void setEmployeAge(String employeAge) {
        this.employeAge = employeAge;
    }

    public String getProfileImage() {
        return profileImage;
    }

    public void setProfileImage(String profileImage) {
        this.profileImage = profileImage;
    }
}

Endi esa Retrofit obyektini URL va konvertor yordamida yaratamiz:

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(ApiCaller.BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .build();

So'rov yuborishni boshlasak bo'ladi
Retrofit obyekti yaratilgandan so'ng, API interfeysi retrofit obyekti yordamida yaratiladi va ushbu API yordamida biz tarmoqga so'rovimizni navbatga qo'yamiz. Bu so'rov serverga asinxron ravishda yuboriladi va muvaffaqiyat/muvaffaqiyatsizlik javobi bilan xabar beradi.
OnResponse( ) va onFailure ( ) metodlari yordamida biz kelgan ma'lumotni olish imkoniga egamiz va unutmaslik kerak ushbu ikki metod ham asosiy oqimda (Main thread) ishlaydi.

ApiCaller apiCaller = retrofit.create(ApiCaller.class);
Call<EmployeeData> employeeData = apiCaller.getData();
employeeData.enqueue(new Callback<EmployeeData>() {
    @Override
    public void onResponse(Call<EmployeeData> call,
                           Response<EmployeeData> response) {
        Log.d(TAG, "onResponse: "+response.body());
    }

    @Override
    public void onFailure(Call<EmployeeData> call,
                          Throwable t) {
        Log.e(TAG, "onFailure: "+t.getMessage());
    }
});

Call va Callback nima deb o'ylab qolgan bo'lsangiz, Call bizga tarmoqga so'rov yuborishda enqueue() metodi chaqirilgan vaqtida uni navbatga qo'yib beradi. Callback esa interface bo'lib bizga natija qaytishini kuzatib turadi.

Ushbu maqola sizga Retrofit kutubxonasi haqida boshlang'ich tushuncha olish va undan qanday foydalanish haqida umumiy ma'lumot berish maqsadida tayyorlandi. Eslatib o'tamiz, Retrofitning yana ko'plab imkoniyatlari bor.
Manba:


JONNY - Texnoman foydalanuvchisi

Muallif haqida

JONNY Arduino, Java, C#, Android, Windows, Linux, Debian, Javascript. O'zbekistonni rivojlantiramiz! Dasturlash orqali vatanimizni yangi marralarga olib chiqamiz.


Blogdagi so‘nggi maqolalar:


Fikrlar 1

Ruzibekov01
Ruzibekov01
Retrofit kutubxonasidan foydalanish bo'yicha chuqurroq ma'lumotlar berib, Uni boshqa mavzularga bog'lab (Retrofit/MVI, Hilt) postlar chiqarsangiz zo'r bo'lardi
Iltimos, fikr bildirish uchun saytga kiring yoki ro‘yxatdan o‘ting!