Android - Retrofit - Networking - Parse Data from API - Sử dụng thư viện Retrofit lấy dữ liệu từ API trong Android Studio

1. Tìm hiểu về Retrofit
2. Sử dụng Retrofit trong Android Studio

Bước 1: Thêm user-permission truy cập internet để kết nối internet

<uses-permission android:name="android.permission.INTERNET" />

Bước 2: Thêm dependencies cho Retrofit trong build.grade

Thêm trực tiếp trong dependencies:

compile 'com.squareup.retrofit2:retrofit:2.2.0'

Hoặc sử dụng cách sau để thêm với version mới nhất:
Nhấn Ctrl+Alt+Shift (hoặc chọn File--> Project Structure) , sau đó tìm đến Modules -->App--> Dependencies -->Chọn dấu cộng ở góc phải--> Library Dependency, Nhập retrofit và search --> chọn và OK.

Bước 3: Tạo model
Ở đây ta lấy một ví dụ về lấy dữ liệu là một json object từ API, ta cần tạo một lớp Model với các thuộc tính mô tả theo cấu trúc của json object
Ta sử dụng một công cụ online để tạo model, trước đó phải có một json data mẫu để tạo, truy cập trang:(ngoài ra ta có thể vào https://jsonformatter.curiousconcept.com/ để xem cấu trúc json object, thêm add-on Postman trong Chorme để thao tác trực tiếp với API)

http://www.jsonschema2pojo.org/

Để tạo model, copy data json vào web, sau đó đặt các thông số tùy chọn cho nó:
- tên package của project
- tên class model
- Annotation style chọn gson
--> lấy zip file model về copy vào package đã điền ở trên trong project

Lúc này sẽ xảy ra lỗi, ta cần thêm dependency cho gson

compile 'com.squareup.retrofit2:converter-gson:2.2.0'

Bước 4: Thêm retrofit adapter

Thêm dependency

compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'


Bước 5: Tạo một REST API cho Retrofit

Bước 6: chạy retrofit và lấy dữ liệu đổ lên giao diện UI

http://square.github.io/retrofit/

https://blog.robinchutaux.com/blog/a-smart-way-to-use-retrofit/
http://www.vogella.com/tutorials/Retrofit/article.html
https://github.com/codepath/android_guides/wiki/Consuming-APIs-with-Retrofit
https://androidcoban.com/huong-dan-su-dung-thu-vien-retrofit-2-get-json-data.html
https://realm.io/news/droidcon-jake-wharton-simple-http-retrofit-2/
https://square.github.io/retrofit/2.x/retrofit/
http://stackoverflow.com/questions/28426154/retrofit-post-parameter
http://www.androidhive.info/2016/05/android-working-with-retrofit-http-library/

Kết luận: để sử dụng retrofit trong project Android ta phải:
- Thêm tối thiểu 3 dependency sau:
  + com.squareup.retrofit2:retrofit
  + com.squareup.retrofit2:converter-gson
  + com.squareup.retrofit2:converter-gson
- Thêm user-permission : INTERNET
- Sử dụng trang www.jsonschema2pojo.org để tảo model (dùng cái này cho nhanh, hoặc cách khác)
- Tạo interface client - API với các phương thức get,post,put,... cần thiết theo nhu cầu sử dụng
- Tạo Adapter để sử dụng retrofit, sử dụng ở bất cứ đâu cần lấy dữ liệu từ API
- Sử dụng API trên http://jsonplaceholder.typicode.com để test với JSON


public interface DataRetrofitAPI {
    @FormUrlEncoded    @POST("path")
    Call<DataModel> postData(@Field("param_key") int param_value);
}

public class DataRetrofitManager implements Callback<DataModel> {
    private static final String BASE_URL = "URL_here";    private DataListener listener;
    public interface DataListener {
        void commitData(Data data);
        void onError();    }

    public void registerDataListener(DataListener listener) {
        this.listener = listener;    }

    public void unregisterListener() {
        this.listener = null;    }

    public void start(int numberProduct) {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        DataRetrofitAPI dataRetrofitAPI = retrofit.create(DataRetrofitAPI.class);
        Call<DataModel> call = dataRetrofitAPI.postData(paramKey);
        call.enqueue(this);
    }

    @Override    
    public void onResponse(Call<DataModel> call, 
                Response<DataModel> response) {
        if (response.isSuccessful()) {
                      
            listener.commitData(response.body().getData());            
       
            } else {
                    
                   }
    }

    @Override    public void onFailure(Call<DataModel> call, Throwable t) {
        listener.onError();    }


}

DataRetrofitManager manager;
manager = new DataRetrofitManager();manager.registerDataListener(this);


Nhận xét

Bài đăng phổ biến từ blog này

Android - Date Time - Lấy giá trị ngày, giờ theo định dạng tùy biến trong Android Studio

Android - Custom SearchView - Tạo khung tìm kiếm đơn giản trong Android Studio

Android - Image - Take Photo, Choose Photo from Gallery - Xử lý chụp ảnh, lấy ảnh trong Android Studio