Junior
Retrofit nədir və Android inkişafında necə istifadə olunur?
sobes.tech Süni İntellekt
AI-dan cavab
Retrofit, Android və Java üçün HTTP sorğuları üçün tip-təhlükəsiz müştəridir. O, sorğuları təsvir etmək üçün annotasiyaları istifadə edərək REST API-lərlə qarşılıqlı əlaqəni sadələşdirir.
Əsas üstünlüklər:
- Tip təhlükəsizliyi: Sorğular və cavablar Java (və ya Kotlin) obyektləri kimi təqdim olunur, bu da icra zamanı səhvlərin sayını azaldır.
- İstifadə asanlığı: HTTP metodlarını annotasiyalar vasitəsilə elan etmək kodu daha oxunaqlı və dəstəklənən edir.
- Konfiqurasiya edilə bilər: Loglama, autentifikasiya və digər tapşırıqlar üçün interceptors əlavə etmək asandır.
- Konvertorlərlə inteqrasiya: Cavabların parsinqi üçün müxtəlif konvertorləri dəstəkləyir (JSON, XML və s.), məsələn Gson, Jackson.
İstifadə:
-
Asılılıqları əlavə edin:
// build.gradle (app səviyyəsi) dependencies { implementation 'com.squareup.retrofit2:retrofit:<latest_version>' // Məlumatlar üçün konvertor seçin (bu nümunədə Gson) implementation 'com.squareup.retrofit2:converter-gson:<latest_version>' } -
API interfeysini müəyyən edin: Java/Kotlin interfeysini yaradın və bütün Endpoint-ləri annotasiyalarla elan edin.
// 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}" üçün GET sorğusu Call<User> getUser(@Path("userId") int userId); // @Path URL-ə dəyəri yerinə qoymaq üçün @GET("posts") // URL "posts" üçün GET sorğusu Call<List<Post>> getPosts(); } // User.java (cavab üçün POJO nümunəsi) public class User { private int id; private String name; // getter və setterlər } // Post.java (cavab üçün POJO nümunəsi) public class Post { private int id; private int userId; private String title; private String body; // getter və setterlər } -
Retrofit nümunəsini yaradın:
// RetrofitClient.java import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; public class RetrofitClient { private static final String BASE_URL = "https://api.example.com/"; // API-nin əsas URL-i private static Retrofit retrofit; public static Retrofit getRetrofitInstance() { if (retrofit == null) { retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) // Əsas URL-i qur .addConverterFactory(GsonConverterFactory.create()) // Konvertoru əlavə et .build(); } return retrofit; } public static ApiService getApiService() { return getRetrofitInstance().create(ApiService.class); // API xidmətinin nümunəsini yaradın } } -
Sorğuları icra edin:
// Activity, Fragment və ya ViewModel-də import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; // ... ApiService apiService = RetrofitClient.getApiService(); // ID ilə istifadəçini almaq üçün asinxron sorğu Call<User> userCall = apiService.getUser(1); userCall.enqueue(new Callback<User>() { // enqueue asinxron icra üçün @Override public void onResponse(Call<User> call, Response<User> response) { if (response.isSuccessful() && response.body() != null) { User user = response.body(); // alınan user ilə işləmə } else { // səhvi işləmə (məsələn, response.code(), response.errorbody()) } } @Override public void onFailure(Call<User> call, Throwable t) { // şəbəkə səhvi və ya digər istisna işləmə t.printStackTrace(); } }); // Postların siyahısını almaq üçün asinxron sorğu 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ın siyahısını işləmə } else { // səhvi işləmə } } @Override public void onFailure(Call<List<Post>> call, Throwable t) { // səhvi işləmə t.printStackTrace(); } });
Retrofit HTTP ilə işləmənin aşağı səviyyəli detalları ilə işləmədən, tətbiq məntiqinə fokuslanmağa imkan verir.