Junior
Retrofit nedir ve Android geliştirmede nasıl kullanılır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Retrofit, Android ve Java altında HTTP istekleri için tür güvenli (type-safe) bir istemcidir. REST API'leri ile etkileşimi basitleştirir ve istekleri tanımlamak için anotasyonlar kullanır.
Ana avantajlar:
- Tür güvenliği: İstekler ve yanıtlar Java (veya Kotlin) nesneleri olarak temsil edilir, bu da çalışma zamanında hataları azaltır.
- Kullanım kolaylığı: HTTP metodlarını anotasyonlar ile tanımlamak, kodu daha okunabilir ve bakımı kolay hale getirir.
- Yapılandırılabilirlik: Loglama, kimlik doğrulama ve diğer görevler için interceptors eklemek kolaydır.
- Dönüştürücü entegrasyonu: Yanıtları (JSON, XML vb.) çözümlemek için çeşitli dönüştürücüler destekler (örneğin Gson, Jackson).
Kullanım:
-
Bağımlılıkları ekleyin:
// build.gradle (uygulama seviyesi) dependencies { implementation 'com.squareup.retrofit2:retrofit:<latest_version>' // Verileriniz için dönüştürücü seçin (örneğin Gson) implementation 'com.squareup.retrofit2:converter-gson:<latest_version>' } -
API arayüzünü tanımlayın: Tüm API Endpoint'lerini anotasyonlar ile tanımlayan Java/Kotlin arayüzü oluşturulur.
// 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}" için GET isteği Call<User> getUser(@Path("userId") int userId); // @Path ile URL'ye değer yerleştirme @GET("posts") // URL "posts" için GET isteği Call<List<Post>> getPosts(); } // User.java (yanıt için POJO örneği) public class User { private int id; private String name; // getter ve setterlar } // Post.java (yanıt için POJO örneği) public class Post { private int id; private int userId; private String title; private String body; // getter ve setterlar } -
Retrofit örneği oluşturun:
// RetrofitClient.java import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; public class RetrofitClient { private static final String BASE_URL = "https://api.example.com/"; // API temel URL'niz private static Retrofit retrofit; public static Retrofit getRetrofitInstance() { if (retrofit == null) { retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) // Temel URL ayarla .addConverterFactory(GsonConverterFactory.create()) // Dönüştürücü ekle .build(); } return retrofit; } public static ApiService getApiService() { return getRetrofitInstance().create(ApiService.class); // API servisi örneği oluştur } } -
İstekleri gerçekleştirin:
// Activity, Fragment veya ViewModel'da import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; // ... ApiService apiService = RetrofitClient.getApiService(); // ID ile kullanıcı almak için asenkron istek Call<User> userCall = apiService.getUser(1); userCall.enqueue(new Callback<User>() { // enqueue asenkron yürütme için @Override public void onResponse(Call<User> call, Response<User> response) { if (response.isSuccessful() && response.body() != null) { User user = response.body(); // Alınan kullanıcıyı işle } else { // Hata işle (örneğin, response.code(), response.errorbody()) } } @Override public void onFailure(Call<User> call, Throwable t) { // Ağ hatası veya başka istisna işle t.printStackTrace(); } }); // Post listesi almak için asenkron istek 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(); // Post listesini işle } else { // Hata işle } } @Override public void onFailure(Call<List<Post>> call, Throwable t) { // Hata işle t.printStackTrace(); } });
Retrofit, HTTP ile ilgili düşük seviyeli detayları soyutlar ve uygulama mantığına odaklanmanıza olanak tanır.