Sobes.tech
Junior

Retrofit nima va Android dasturlashda qanday ishlatiladi?

sobes.tech AI

AIdan javob

Retrofit — bu Android va Java uchun turga xavfsiz HTTP so'rovlar uchun mijoz. U REST API bilan o'zaro aloqani soddalashtiradi, so'rovlarni tavsiflash uchun annotatsiyalarni ishlatadi.

Asosiy afzalliklar:

  • Tur xavfsizligi: So'rovlar va javoblar Java (yoki Kotlin) obyektlari shaklida taqdim etiladi, bu bajarilish vaqtida xatoliklarni kamaytiradi.
  • Foydalanish osonligi: HTTP metodlarini annotatsiyalar yordamida e'lon qilish kodni o'qilishi va qo'llab-quvvatlashni yaxshilaydi.
  • Konfiguratsiya qilish imkoniyati: Loglash, autentifikatsiya va boshqa vazifalar uchun interceptorslarni osongina qo'shish mumkin.
  • Konvertorlarga integratsiya: Turli konvertorlardan foydalanishni qo'llab-quvvatlaydi (JSON, XML va boshqalar), masalan Gson, Jackson.

Foydalanish:

  1. Qaramliklarni qo'shish:

    // build.gradle (ilova darajasi)
    dependencies {
        implementation 'com.squareup.retrofit2:retrofit:<latest_version>'
        // Ma'lumotlar uchun konvertorni tanlang (bu yerda Gson uchun misol)
        implementation 'com.squareup.retrofit2:converter-gson:<latest_version>'
    }
    
  2. API interfeysini aniqlash: Java/Kotlin interfeysini yaratish, u API Endpoint'larini annotatsiyalar yordamida e'lon qiladi.

    // ApiService.java
    import retrofit2.Call;
    import retrofit2.http.GET;
    import retrofit2.http.Path;
    import java.util.List;
    
    public interface ApiService {
    
        @GET("users/{userId}") // URL "users/{userId}" uchun GET so'rovi
        Call<User> getUser(@Path("userId") int userId); // @Path URL ichida qiymatni joylashtirish uchun
    
        @GET("posts") // URL "posts" uchun GET so'rovi
        Call<List<Post>> getPosts();
    }
    
    // User.java (javob uchun POJO misol)
    public class User {
        private int id;
        private String name;
        // getter va setterlar
    }
    
    // Post.java (javob uchun POJO misol)
    public class Post {
        private int id;
        private int userId;
        private String title;
        private String body;
        // getter va setterlar
    }
    
  3. Retrofit nusxasini yaratish:

    // RetrofitClient.java
    import retrofit2.Retrofit;
    import retrofit2.converter.gson.GsonConverterFactory;
    
    public class RetrofitClient {
    
        private static final String BASE_URL = "https://api.example.com/"; // API ning asosiy URL
        private static Retrofit retrofit;
    
        public static Retrofit getRetrofitInstance() {
            if (retrofit == null) {
                retrofit = new Retrofit.Builder()
                        .baseUrl(BASE_URL) // Asosiy URL ni o'rnatish
                        .addConverterFactory(GsonConverterFactory.create()) // Konverterni qo'shish
                        .build();
            }
            return retrofit;
        }
    
        public static ApiService getApiService() {
            return getRetrofitInstance().create(ApiService.class); // API xizmatining nusxasini yaratish
        }
    }
    
  4. So'rovlarni bajarish:

    // Activity, Fragment yoki ViewModel da
    import retrofit2.Call;
    import retrofit2.Callback;
    import retrofit2.Response;
    
    // ...
    
    ApiService apiService = RetrofitClient.getApiService();
    
    // ID bo'yicha foydalanuvchini olish uchun asinxron so'rov
    Call<User> userCall = apiService.getUser(1);
    userCall.enqueue(new Callback<User>() { // enqueue asinxron bajarish uchun
        @Override
        public void onResponse(Call<User> call, Response<User> response) {
            if (response.isSuccessful() && response.body() != null) {
                User user = response.body();
                // Olingan user bilan ishlash
            } else {
                // Xatoni ishlash (masalan, response.code(), response.errorbody())
            }
        }
    
        @Override
        public void onFailure(Call<User> call, Throwable t) {
            // Tarmoq yoki boshqa xatoni ishlash
            t.printStackTrace();
        }
    });
    
    // Postlar ro'yxatini olish uchun asinxron so'rov
    Call<List<Post>> postsCall = apiService.getPosts();
    postsCall.enqueue(new Callback<List<Post>>() {
        @Override
        public void onResponse(Call<List<Post>> call, Response<List<Post>> response) {
            if (response.isSuccessful() && response.body() != null) {
                List<Post> posts = response.body();
                // Postlar ro'yxatini ishlash
            } else {
                // Xatoni ishlash
            }
        }
    
        @Override
        public void onFailure(Call<List<Post>> call, Throwable t) {
            // Xatoni ishlash
            t.printStackTrace();
        }
    });
    

Retrofit HTTP bilan ishlashning pastki qatlam tafsilotlarini ajratib, ilova mantiqiga e'tibor qaratishga imkon beradi.