Retrofit হলো একটি Type-safe HTTP ক্লায়েন্ট, যা Android এবং Java এ RESTful API-এর সাথে যোগাযোগ করতে ব্যবহৃত হয়। Gson-এর সাথে Retrofit একত্রে ব্যবহার করলে আপনি JSON ডেটাকে সহজে Java অবজেক্টে রূপান্তর করতে পারেন এবং JSON ডেটাকে API রিকোয়েস্ট বা রেসপন্স হিসেবে প্রেরণ ও গ্রহণ করতে পারেন।
এখানে আমরা Gson এবং Retrofit ব্যবহার করে API কল করার একটি উদাহরণ দেখব, যেখানে JSON ডেটা অ্যাপ্লিকেশন থেকে API এর মাধ্যমে পাঠানো এবং প্রাপ্ত হবে।
1. Retrofit এবং Gson এর ডিপেনডেন্সি
Retrofit এবং Gson এর সাথে কাজ করার জন্য প্রথমে আপনাকে আপনার প্রকল্পে কিছু লাইব্রেরি যোগ করতে হবে।
Maven Dependency:
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>converter-gson</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version>
</dependency>
Gradle Dependency:
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.google.code.gson:gson:2.8.9'
2. Gson এবং Retrofit এর সাথে API কল
ধরা যাক আমাদের একটি User নামের REST API আছে যা JSON ফর্ম্যাটে ডেটা রিটার্ন করবে।
API Response Structure (JSON):
{
"id": 1,
"name": "John Doe",
"email": "johndoe@example.com"
}
Step-by-Step Retrofit Integration:
- Step 1: API Endpoint Interface তৈরি
প্রথমে, আপনাকে একটি interface তৈরি করতে হবে যেখানে API রিকোয়েস্টগুলি এবং তাদের রেসপন্স মেথডগুলি থাকবে।
import retrofit2.Call;
import retrofit2.http.GET;
public interface ApiService {
// HTTP GET রিকোয়েস্ট, এখানে "user" একটি API endpoint
@GET("user")
Call<User> getUser();
}
- Step 2: User Class তৈরি (POJO Class)
এবার,Userক্লাস তৈরি করতে হবে, যা JSON রেসপন্স থেকে ডেটা ধারণ করবে।
public class User {
private int id;
private String name;
private String email;
// Getter methods
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
}
- Step 3: Retrofit Configuration (Gson Converter সেটআপ)
Gson কনভার্টার ব্যবহার করে, আপনি JSON ডেটাকে Java অবজেক্টে কনভার্ট করবেন।
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class RetrofitClient {
private static Retrofit retrofit;
private static final String BASE_URL = "https://yourapiurl.com/";
// Retrofit instance তৈরি এবং Gson কনভার্টার সেট করা
public static Retrofit getRetrofitInstance() {
if (retrofit == null) {
Gson gson = new GsonBuilder().setLenient().create(); // Optional: For lenient parsing of JSON
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
}
return retrofit;
}
}
- Step 4: API Call
এবার Retrofit এর মাধ্যমে API কল করা এবং রেসপন্স পদ্ধতি (callback) নির্ধারণ করা।
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class Main {
public static void main(String[] args) {
// Retrofit instance তৈরি
ApiService apiService = RetrofitClient.getRetrofitInstance().create(ApiService.class);
// API কল শুরু
Call<User> call = apiService.getUser();
// Asynchronous API কল
call.enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
if (response.isSuccessful()) {
// JSON থেকে User অবজেক্টে ডেটা রূপান্তরিত
User user = response.body();
System.out.println("User ID: " + user.getId());
System.out.println("User Name: " + user.getName());
System.out.println("User Email: " + user.getEmail());
} else {
System.out.println("Request failed with code: " + response.code());
}
}
@Override
public void onFailure(Call<User> call, Throwable t) {
// API কল ব্যর্থ হলে error handling
t.printStackTrace();
}
});
}
}
3. Synchronous API Call
এছাড়া, আপনি Synchronous কলও করতে পারেন, যেখানে আপনি API কলের রেসপন্সের জন্য ব্লকিং অপারেশন ব্যবহার করবেন। তবে এটি মূলত Asynchronous API কলের চেয়ে কম ব্যবহৃত, কারণ এটি UI থ্রেডে ব্লকিং ঘটাতে পারে, যা Android অ্যাপ্লিকেশনে পারফরম্যান্স ইস্যু তৈরি করতে পারে।
public class Main {
public static void main(String[] args) {
// Retrofit instance তৈরি
ApiService apiService = RetrofitClient.getRetrofitInstance().create(ApiService.class);
// Synchronous API call
try {
Response<User> response = apiService.getUser().execute(); // execute() সিঙ্ক্রোনাস কলের জন্য
if (response.isSuccessful()) {
User user = response.body();
System.out.println("User ID: " + user.getId());
System.out.println("User Name: " + user.getName());
System.out.println("User Email: " + user.getEmail());
} else {
System.out.println("Request failed with code: " + response.code());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
4. Error Handling
Retrofit তে error handling করতে হলে onFailure() এবং onResponse() মেথডে যথাযথ যাচাই করতে হবে, যেমন:
- HTTP errors (4xx, 5xx)
- Connection errors (e.g., no internet connection)
- Timeouts
আপনি এরকমও করতে পারেন:
@Override
public void onResponse(Call<User> call, Response<User> response) {
if (response.isSuccessful()) {
User user = response.body();
System.out.println("User Name: " + user.getName());
} else {
// API Call-এ error code থাকলে তা handle করুন
System.out.println("Error: " + response.errorBody());
}
}
@Override
public void onFailure(Call<User> call, Throwable t) {
// Connection অথবা অন্যান্য error-handling
System.out.println("Failed to connect: " + t.getMessage());
}
Retrofit এবং Gson একত্রে ব্যবহার করলে আপনি সহজে API রিকোয়েস্ট এবং রেসপন্স হ্যান্ডলিং করতে পারবেন, এবং JSON ডেটাকে Java অবজেক্টে রূপান্তর করতে পারবেন। এখানে আমরা দেখলাম কিভাবে Retrofit এর মাধ্যমে GET রিকোয়েস্ট করা যায়, Gson দিয়ে JSON ডেটা ম্যানিপুলেট করা যায় এবং কিভাবে Asynchronous এবং Synchronous API কল করতে হয়।
Read more