Retrofit and Rxandroid
Bài đăng này đã không được cập nhật trong 3 năm
I. Giới thiệu về Retrofit và Rxandroid
- Retrofit.
Retrofit là một thư viện hỗ trợ việc kết nối và lấy dữ liệu từ một WebService cho Android và Java, được tạo ra bởi Square. Với retrofit bạn có thể dễ dàng lấy dữ liệu từ webservice, convert dữ liệu trả về dạng json thành các object. 2. RXjava và Rxandroid.
Rxjava và Rxandroid Là thư viện mã nguồn mở implement ReactiveX trên Java, ReactiveX hỗ trợ lập trình dữ liệu bất đồng bộ, được thiết kế dự trên Observer pattern, nó giúp cho việc sử lý dữ liệu bất đồng bộ một cách hiệu quả , Rxjava cung cấp rất nhiều các operator hỗ trợ cho việc sử lý dữ liệu nhứ filter, groupBy, ...
II. Ví dụ về sử dụng Retrofit và RxAndroid
Trong ví dụ này chúng ta sẽ thực hiện lấy về thông tin thời tiết của một thành phố dựa vào api của website http://openweathermap.org/. để sử dụng api chúng ta cần đăng kí một tài khoản và lấy api_key.
Để sử dụng Retrofit và RxAndroid chúng ta cần thêm các thư viện vào project.
//retrofit
compile 'com.squareup.retrofit2:retrofit:2.1.0'
//rxjava and rxandroid
compile 'io.reactivex:rxandroid:1.2.1'
compile 'io.reactivex:rxjava:1.1.6'
//rxjava adapter
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
Thêm gói thư viện hỗ trợ convert json sang object
//convert gson
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
Sau khi thực hiện request dữ liệu từ api chúng ta sẽ nhận được dữ liệu định dạng json như sau
{
coord: {
lon: 105.85,
lat: 21.03
},
weather: [
{
id: 801,
main: "Clouds",
description: "few clouds",
icon: "02d"
}
],
base: "stations",
main: {
temp: 304.01,
pressure: 1012.14,
humidity: 86,
temp_min: 304.01,
temp_max: 304.01,
sea_level: 1020.34,
grnd_level: 1012.14
},
wind: {
speed: 2.55,
deg: 157.003
},
clouds: {
all: 24
},
dt: 1466568490,
sys: {
message: 0.0111,
country: "VN",
sunrise: 1466547378,
sunset: 1466595662
},
id: 1561096,
name: "Xóm Pho",
cod: 200
}
Từ chuỗi json trên chúng ta tạo các model tuơng ứng, Khi tạo model chúng ta cần lưu ý đến tên và kiểu của các trường dữ liệu phải tuơng ứng trong chuỗi json trả về , đảm bảo gson có thể map từ json sang object
Tạo Interfaces để định nghĩa các API cho Webservice
public interface RetrofitWithRxAndroidService {
@GET("weather")
Observable<CurrentWeather> getCurrentWeather(@Query("q") String city, @Query("APPID") String apiKey);
}
Khởi tạo retrofit và lấy dữ liệu
Retrofit retrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("http://api.openweathermap.org/data/2.5/weather")
.build();
RetrofitWithRxAndroidService retrofitWithRxAndroidService = retrofit.create(RetrofitWithRxAndroidService.class);
Observable<CurrentWeather> currentWeatherObservable = retrofitWithRxAndroidService.getCurrentWeather("HaNoi");
currentWeatherObservable.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<CurrentWeather>() {
@Override
public void call(CurrentWeather currentWeather) {
mTextViewData.setText(currentWeather.getWeather().get(0).getDescription());
}
});
Từ ví dụ trên chúng ta có thể thấy việc kết nối đến Webservice lấy dữ liệu trở nên dễ dàng.
Reference
All rights reserved