Cách sử dụng Retrofit trong Android

Retrofit là gì ?

A type-safe HTTP client for Android and Java

Retrofit là thư viện phân tích cú pháp phản hồi API bằng cách chuyển đổi API thành Java Interface.
Retrofit rất phổ biến với ưu điểm của nó chính là hiệu năng, thời gian thực thi task nhanh hơn AsyncTask và Volley.

Tuy nhiên Retrofit không tích hợp bất kỳ một bộ chuyển đổi JSON nào để phân tích từ JSON thành các đối tượng Java. Thay vào đó nó đi kèm với các thư viện chuyển đổi JSON sau đây để xử lý điều đó:

  • Gson: com.squareup.retrofit:converter-gson
  • Jackson: com.squareup.retrofit:converter-jackson
  • Moshi: com.squareup.retrofit:converter-moshi

Để sử dụng Retrofit chúng ta thêm dependency trong file build.gradle:

1
2
3
implementation 'com.squareup.retrofit2:retrofit:latest.version'
implementation 'com.squareup.retrofit2:converter-gson:latest.version'

Mình sẽ sử dụng retrofit thông qua 1 api giúp lấy tỉ giá tiền tệ với request dưới đây, bắt đầu thôi!

http://apilayer.net/api/live?access_key=843d4d34ae72b3882e3db642c51e28e6¤cies=VND&source=USD&format=1

Tạo Model Respone

Chúng ta sẽ tạo một Class Model dựa trên JSON trả về của api

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
public class ResponseCurrency {
private boolean success;
private String terms;
private String privacy;
private int timestamp;
private String source;
private QuotesBean quotes;
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getTerms() {
return terms;
}
public void setTerms(String terms) {
this.terms = terms;
}
public String getPrivacy() {
return privacy;
}
public void setPrivacy(String privacy) {
this.privacy = privacy;
}
public int getTimestamp() {
return timestamp;
}
public void setTimestamp(int timestamp) {
this.timestamp = timestamp;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public QuotesBean getQuotes() {
return quotes;
}
public void setQuotes(QuotesBean quotes) {
this.quotes = quotes;
}
public static class QuotesBean {
private double USDVND;
public double getUSDVND() {
return USDVND;
}
public void setUSDVND(double USDVND) {
this.USDVND = USDVND;
}
}
}

Tạo Interface

1
2
3
4
5
6
7
8
public interface ConvertMoneyService {
@GET("api/live")
Call<ResponseCurrency> convertVNDtoUSD(@Query("access_key") String access_key,
@Query("currencies") String currencies,
@Query("source") String source,
@Query("format") int format);
}

Các annotation ở interface method và các tham số sẽ thể hiện cách request được xử lý như thế nào.

Request Method

Mỗi phương thức phải có Annotation HTTP cung cấp request method và URL. Có 5 Annotation được tích hợp sẵn: @GET, @POST, @PUT, @DELETE và @HEAD

1
2
@GET("api/live")

Query parameter

Thêm các parameter yêu cầu

1
2
@Query("access_key") String access_key

Tạo implemention của interface

1
2
3
4
5
6
ConvertMoneyService convertMoneyService = new Retrofit.Builder()
.baseUrl("http://apilayer.net/") // API base url
.addConverterFactory(GsonConverterFactory.create()) // Factory phụ thuộc vào format JSON trả về
.build()
.create(ConvertMoneyService.class)

Thực hiện request

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Nếu key này hết hạn không dùng được các bạn phải tự đăng ký trên trang của nó nhé
String ACCESS_KEY_API_CURRENCY = "843d4d34ae72b3882e3db642c51e28e6";
convertMoneyService.convertVNDtoUSD(ACCESS_KEY_API_CURRENCY,"VND", "USD", 1)
.enqueue(new Callback<ResponseCurrency>() {
@Override
public void onResponse(Call<ResponseCurrency> call, Response<ResponseCurrency> response)
// Data trả về
ResponseCurrency res = response.body()
//Tỉ giá mình lấy được
exchangeRate = res.getQuotes().getUSDVND();
}
@Override
public void onFailure(Call<ResponseCurrency> call, Throwable t) {
}
});

Retrofit còn hỗ trợ nhiều thứ như URL MANIPULATION,FORM ENCODED, MULTIPART, mời các bạn tham khảo thêm tại https://square.github.io/retrofit/

Chia sẻ bài viết ngay