Tuy nhiên trong quá trình làm việc, các thao tác xử lý bất đồng bộ thường là các thao tác với mạng. Và mỗi lần phải sử dụng AsyncTask để làm như vậy thì quả là dài.
Bài hôm nay chúng ta sẽ sử dụng một thư viện hỗ trợ mạng cực mạnh, cũng như một bộ xử lý thông tin dạng JSON mà các Web API hay sử dụng rất phổ biến.
Nội dung
Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về các phần:
Trong bài học này, chúng ta sẽ cùng tìm hiểu các vấn đề:
Cài đặt thư viện OkHttp và Moshi.
Sử dụng 2 thư viện trên để lấy dữ liệu đổ vào ứng dụng.
Tạo project mới
Như thường lệ, chúng ta sẽ tạo một project mới với tên là JSONExample
Và chọn minSdk là 13:
Cài đặt OkHttp và Moshi
Cài đặt thư viện OkHttp và Moshi vào ứng dụng thật ra rất đơn giản. Do Android Studio đã tích hợp Gradle làm build system và chúng ta có thể lấy bất cứ thư viện nào lưu trên jCenter và Maven Central (2 website chứa thư viện / dependencies cho Java lớn nhất hiện nay).
Bước 1: Mở file app/build.gradle. Các bạn nhìn ở cột trái sẽ thấy 2 file build.gradle, nhớ chọn cái (module: app) nhé:
Chúng ta thêm 2 dòng sau vào file build.gradle như thế này:
Đây là API public của Github, trả về một danh sách các người dùng Github. Và cái chúng ta muốn là đưa danh sách này hiển thị thành RecyclerView trong Android cho dễ xem.
Để cho đơn giản thì chúng ta chỉ lấy 3 trường trong json là login, id và avatar_url.
Bước 1:Đầu tiên chúng ta tạo một file .java mới để làm model, lấy tên là User.java:
Về bản chất, việc sử dụng 2 thư viện OkHttp và Moshi không khác gì so với dùng AyncTask kèm JSONObject – 2 thư viện có sẵn của Android, nhưng…
Android không cho phép thao tác mạng trên UI Thread, do đó phải thực hiện theo kiểu bất đồng bộ. OkHttp hỗ trợ rất tốt việc này, mà code lại ngắn hơn do không phải viết class AsyncTask.
Moshi giúp chúng ta chuyển đổi thẳng từ tên các trường trong Model ra JSON.
Kết hợp cả 2 thư viện này với Picasso để hỗ trợ load ảnh, chúng ta đã viết được một chương trình con rất nhanh.
Kết luận
Qua bài này chúng ta đã nắm được cách sử dụng OkHttp theo kiểu bất đồng bộ thay cho AsyncTask, kết hợp với Moshi để xử lý dữ liệu JSON đổ vào danh sách trong Android.
Bài sau chúng ta sẽ tìm hiểu về PERMISSION TRONG ANDROID, vấn đề tưởng chừng nhỏ nhưng cũng có phần phức tạp.
Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.
Tải xuống
Tài liệu
Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học JSON và web API trong lập trình Android cơ bản dưới dạng file PDF trong link bên dưới.
Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com
Đừng quên like và share để ủng hộ Kteam và tác giả nhé!
Thảo luận
Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.
cho mình hỏi để in ra các chuyên mục từ categories từ trang này http://webservice.bidiworks.com/tinphatgiao.php thì mình cần thêm và thay đổi những gì mình đã làm thử tất cả đều bị RecyclerView:
No adapter attached; skipping layout
cho mình hỏi để in ra các chuyên mục từ categories từ trang này http://webservice.bidiworks.com/tinphatgiao.php thì mình cần thêm và thay đổi những gì mình đã làm thử tất cả đều bị RecyclerView: No adapter attached; skipping layout
Lỗi này là lỗi gì vậy ad
Process: com.example.m4800.tapbibuzz, PID: 974
com.squareup.moshi.JsonDataException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at path $