Cách Lấy Dữ Liệu Từ Webservice

 - 

Bài này là 1 phần của khóa đào tạo và huấn luyện thiết kế cnạp năng lượng phiên bản Android sử dụng ngôn ngữ Kotlin. Quý Khách đã nhận được nhiều giá trị tốt nhất từ khóa học này nếu như khách hàng làm việc tuần tự qua từng bài học. Tất cả những bài học của khoá học được liệt kê trên trang trình làng khóa huấn luyện lập trình cnạp năng lượng phiên bản Android sử dụng ngôn ngữ Kotlin.

Bạn đang xem: Cách lấy dữ liệu từ webservice

Bài này là 1 phần của seri các bài bác khuyên bảo các bạn tạo ra thông qua 1 vận dụng nhằm nhận tài liệu về những gia sản cung cấp trên sao Hỏa. Ứng dụng dìm tài liệu từ mạng internet và hiển thị dữ liệu vào RecyclerView. Chúng tôi khuim bạn nên học tập toàn bộ những bài bác theo tuần từ, cũng chính vì nó được thực hiện trải qua các nhiệm vụ theo từng bước một.

Các bài xích trong seri này:

Giới thiệu

Phần mập ngẫu nhiên ứng dụng nào bạn gây ra đang bắt buộc kết nối với mạng internet ở một trong những thời khắc. Trong bài bác này cùng phần lớn bài bác sau nữa, các bạn kiến thiết một ứng dụng liên kết mang lại website service để dìm cùng hiển thị tài liệu. Bạn cũng tạo ra hầu như gì bạn làm việc được tự các bài trước về ViewModel, LiveData, cùng RecyclerView.

Trong bài bác này, các bạn sử dụng những tlỗi viện được cộng đồng trở nên tân tiến nhằm tạo lớp mạng. Như vậy giúp dễ dàng và đơn giản hóa tương đối nhiều câu hỏi hấp thụ tài liệu và hình hình ảnh, cùng cũng góp ứng dụng tuân hành vài hưởng thụ tốt nhất có thể vào Android, chẳng hạn như câu hỏi sở hữu các hình ảnh trên luồng background cùng lưu tạm thời các hình hình ảnh được cài đặt. Với các phần không đồng điệu hoặc không bị chặn trong mã, ví dụ như thao tác làm việc cùng với lớp web service, các bạn sẽ kiểm soát và điều chỉnh vận dụng thực hiện coroutines của Kotlin. quý khách hàng cũng trở nên update UI của vận dụng giả dụ mạng chậm chạp hoặc không có mạng, nhằm cho tất cả những người cần sử dụng biết đa số gì sẽ xảy ra.

quý khách hàng cần phải biết trước hầu hết gì

Cách chế tạo ra cùng áp dụng Fragment.Cách điều phối giữa những Fragment, với sử dụng safeArgs nhằm truyền tài liệu giữa những Fragment.Cách thực hiện những yếu tắc kiến trúc bao hàm ViewModel, ViewModelProvider.Factory, LiveData, cùng những phép biến hóa LiveData.Cách áp dụng coroutines cho các quá trình buộc phải thời gian.

Bạn đã học được gì

REST website service là gì.

quý khách sẽ làm được gì

Chỉnh sửa vận dụng starter để tạo nên một đề xuất web service API cùng cách xử trí những ý kiến.Thực hiện lớp mạng đến ứng dụng áp dụng tlỗi viện Retrofit.Phân tích dữ liệu bình luận JSON tự web service thành những LiveData vào ứng dụng với việc sử dụng thư viện Moshi.Sử dụng các cung cấp của Retrofit mang lại coroutines để đơn giản dễ dàng hóa mã.

Trong bài xích này ( với các bài sau), các bạn sẽ làm việc với áp dụng starter, Điện thoại tư vấn là MarsRealEstate, hiển thị các gia sản nhằm cung cấp bên trên sao Hỏa. Ứng dụng này liên kết với website service để nhấn cùng hiển thị tài liệu gia tài, bao hàm các báo cáo chi tiết nlỗi giá bán và gia sản nào dành riêng cho cung cấp hoặc thuê mướn. Các hình hình họa đại diện cho mỗi tài sản là đa số bức ảnh đời thực từ sao Hỏa được chụp từ các tàu tò mò sao Hỏa của NASA.

*

Phiên bạn dạng áp dụng các bạn xuất bản trong bài xích này vẫn không có cái nhìn trực quan: nó triệu tập vào phần lớp mạng của áp dụng kết nối với mạng internet với cài đặt những dữ liệu thô về tài sản, áp dụng web service. Để đảm bảo an toàn rằng tài liệu được nhận cùng đối chiếu chính xác, bạn sẽ in con số gia sản trên sao Hỏa trong một TextView:

*

Kiến trúc mang lại vận dụng MarsRealEstate tất cả hai mô-đun chính:

Một Fragment tổng quan tiền, cất một screen dạng lưới của các hình hình ảnh gia sản, được kiến tạo trong một RecyclerView.Một Fragment chi tiết, cất báo cáo về từng tài sản.

*

Ứng dụng có một ViewModel cho từng Fragment. Trong bài này, bạn sản xuất lớp hình thức mạng, và ViewModel giao tiếp trực tiếp cùng với lớp mạng này. Như vậy tương tự cùng với phần đa gì bạn đang làm sống bài bác trước khi ViewModel giao tiếp với cửa hàng tài liệu Room.

ViewModel tổng quan liêu gồm trách rưới nhiệm điện thoại tư vấn tới trường mạng để dấn lên tiếng BDS trên sao Hỏa. ViewModel chi tiết giữ giàng ban bố cụ thể về một miếng nhà đất được hiển thị vào Fragment chi tiết. Với từng ViewModel, các bạn sử dụng LiveData với data binding tất cả nhận biết vòng đời nhằm cập nhập lại UI ứng dụng Lúc dữ liệu biến hóa.

Quý khách hàng sử dụng nguyên tố navigation cho tất cả câu hỏi điều phối thân nhị Fragment, cùng cũng truyền tài sản được lựa chọn như là một trong đối số.

Trong trọng trách này, bạn cài đặt với chạy ứng dụng starter MarsRealEstate cùng có tác dụng quen thuộc cùng với cấu trúc ứng dụng.

Xem thêm: Cách Coi Điểm Thi Vào 10 Năm 2021, Tra Cứu Điểm Kết Quả Học Tập Trên Vnedu

Cách 1: Khám phá những Fragment với navigation

Xem xét app/java/MainActivity.kt. Ứng dụng áp dụng những Fragment cho cả hai màn hình hiển thị, vì vậy chỉ có công việc cho Activity là mua layout đến Activity.Xem xét app/res/layout/activity_main.xml. Layout Activity là công ty sở hữu nhì Fragment, được khái niệm vào tệp navigation. Layout này khởi sinh sản một NavHostFragment với kết hợp với trình quản lý navigation với tài nguyên ổn nav_graph.Mngơi nghỉ app/res/navigation/nav_graph.xml. Ở đây bạn có thể thấy mối quan hệ navigation thân hai Fragment. Navigation graph cùng với điểm bước đầu là overviewFragment, vị vậy overview Fragment được khởi tạo Khi áp dụng được khởi chạy.

Cách 2: Khám phá những tệp mã Kotlin với data binding

Trong size Project, không ngừng mở rộng tiện ích > java. Lưu ý rằng áp dụng MarsRealEstate tất cả ba gói thư mục: detail, network, và overview. Ba gói này tương ứng với bố thành phần chủ yếu của ứng dụng: Fragment overview và detail, với mã cho lớp mạng.

*

Mngơi nghỉ tệp app/java/overview/OverviewFragment.kt. OverviewFragment khởi tạo nên OverviewViewModel sau, tức là OverviewViewModel được tạo nên ở lần thứ nhất nó được áp dụng. Xem xét cách tiến hành onCreateView(). Phương thơm thức này lồng layout fragment_overview thực hiện data binding, cấu hình thiết lập công ty download vòng đời với chủ yếu nó (this), và gán trở thành viewModel vào đối tượng người sử dụng binding của nó. Bởi bởi vì bạn gán nhà sở hữu vòng đời, ngẫu nhiên LiveData được thực hiện vào data binding vẫn tự động được quan sát và theo dõi bất cứ sự đổi khác nào, với UI đã tự động hóa cập nhật lại tương ứng.Mở tệp app/java/overview/OverviewViewModel. Bởi bởi vì những ý kiến là một trong những LiveData với bạn gán vòng đời cho biến đổi binding, bất cứ biến đổi như thế nào sẽ tiến hành cập nhật trên UI của ứng dụng.Xem xét kân hận init. khi ViewModel được chế tác, nó gọi cách tiến hành getMarsRealEstateProperties().Xem xét cách làm getMarsRealEstateProperties(). Trong áp dụng starter, cách tiến hành này đựng một đánh giá giữ lại địa điểm. Mục đích bài này là cập nhật lại bình luận LiveData bên trong ViewModel thực hiện tài liệu thực cơ mà chúng ta thừa nhận từ bỏ internet.Msống tệp app/res/layout/fragment_overview.xml. Đây là layout cho Fragment overview cơ mà các bạn sẽ thao tác làm việc trong bài này, với nó bao gồm cả data binding mang đến ViewModel. Nó khái báo OverviewViewModel và kế tiếp links những bình luận trường đoản cú ViewModel vào TextView. Trong các bài bác sau, các bạn thay thế TextView bằng một dạng lưới các hình hình họa trong một RecyclerView.Biên dịch với chạy áp dụng. Tất cả số đông gì các bạn thấy trong phiên phiên bản ngày nay của ứng dụng là ý kiến - "Set the Mars API Response here!"

*

Dữ liệu nhà đất sao Hỏa được lưu trữ bên trên một web hệ thống, nlỗi một REST web service. Web service thực hiện kiến trúc REST, được xuất bản áp dụng những yếu tố cùng giao thức web cơ phiên bản.

Quý khách hàng tạo một đề nghị mang đến website service trong biện pháp tiêu chuẩn thông qua các URI. URL website không còn xa lạ thực tế cũng là một một số loại của URI, cùng cả hai gần như được áp dụng thay thế cho nhau nhìn trong suốt khóa này. lấy ví dụ như, vào vận dụng mang đến bài xích này, bạn nhận ra tất cả tài liệu trường đoản cú VPS sau đây:

https://android-kotlin-fun-mars-server.appspot.com

Nếu bạn gõ URL tiếp sau đây vào trình để mắt của chúng ta, bạn sẽ nhận ra một danh sách các gia sản bất động sản có sẵn trên sao Hỏa!

https://android-kotlin-fun-mars-VPS.appspot.com/realestate

Phản hồi xuất phát điểm từ 1 web service là những định hình phổ cập trong JSON, một định dạng thảo luận thể hiện đến tài liệu gồm kết cấu. Bạn tham khảo thêm về JSON trong trọng trách tiếp theo, nhưng mà toàn bộ, đối tượng người dùng JSON là 1 tập thích hợp những cặp khóa-cực hiếm, thỉnh phảng phất được Gọi là dictionary, một hashmap, hoặc mảng kết hợp. Một tập thích hợp các đối tượng JSON là 1 trong mảng JSON, cùng chúng ta nhận ra mảng này dưới dạng một phản hồi trường đoản cú website service.

Để dấn tài liệu này vào trong áp dụng, áp dụng quan trọng lập kết nối mạng với hiệp thương cùng với hệ thống đó, với sau đó nhận với đối chiếu dữ liệu phản hồi vào vào một định hình nhưng ứng dụng hoàn toàn có thể áp dụng. Trong bài xích này, chúng ta thực hiện một thư viện REST, được call Retrofit để tạo ra liên kết này.

Cách 1: Thêm Retrofit dependencies vào Gradle

Mnghỉ ngơi tệp build.gradle (Module: app).Trong phần dependencies, chế tạo những dòng dưới đây cho những thư viện Retrofit:

implementation "com.squareup.retrofit2:retrofit:$version_retrofit"implementation "com.squareup.retrofit2:converter-scalars:$version_retrofit"Lưu ý rằng số phiên bản được tư tưởng riêng rẽ vào tệp Gradle của dự án. Dependency đầu tiên là cho thư viện Retrofit 2, và dependency sản phẩm hai là mang đến trình chuyển đổi Retrofit không khẳng định. Trình đổi khác này chất nhận được Retrofit trả về hiệu quả JSON nlỗi một chuỗi String. Hai thỏng viện này thao tác cùng nhau.

Nhấn Sync Now để biên dịch lại dự án công trình với các dependency bắt đầu.

Bước 2: Triển khai một MarsAPIService

Retrofit chế tạo một API đến vận dụng dựa vào nội dung trường đoản cú web service. Nó hấp thụ dữ liệu từ web service và chuyển nó qua một thư viện biến đổi riêng biệt, mà biết cách để so với dữ liệu và trả về bên dưới dạng những đối tượng người dùng hữu ích. Retrofit bao hàm những cung cấp được tích hòa hợp cho những format dữ liệu website phổ biến nhỏng XML cùng JSON. Retrofit chế tạo hầu như những lớp mạng cho mình, bao hàm các chi tiết đặc biệt như vấn đề triển khai những kinh nghiệm bên trên các luồng dưới background.

Lớp MarsApiService lưu lại lớp mạng cho vận dụng, đó là, API mà ViewModel đang thực hiện nhằm giao tiếp với web service. Đây là lớp nhưng bạn phải thực hiện các API dịch vụ Retrofit.

Msống tệp app/java/network/MarsApiService.kt. Ngay hiện giờ tệp này chỉ đựng một thứ: một hằng mang lại URL đại lý đến website service.

private const val BASE_URL = "https://android-kotlin-fun-mars-server.appspot.com"Ngay dưới hằng này, sử dụng một Retrofit Builder để sinh sản một đối tượng người dùng Retrofit. Khai báo retrofit2.Retrofit cùng retrofit2.converter.scalars.ScalarsConverterFactory Khi được tận hưởng.private val retrofit = Retrofit.Builder() .addConverterFactory(ScalarsConverterFactory.create()) .baseUrl(BASE_URL) .build()Retrofit bắt buộc tối thiểu nhì trang bị có sẵn mang lại nó để xuất bản một API web service: URI đại lý cho website service, cùng một factory trình thay đổi. Trình thay đổi nói đến Retrofit phải làm cái gi với dữ liệu được đem về trường đoản cú website service. Trong ngôi trường đúng theo này, bạn có nhu cầu Retrofit nạp một phản hồi JSON từ bỏ web service, với trả về như một chuỗi String. Retrofit tất cả một ScalarsConverter, hỗ trợ chuỗi và những vẻ bên ngoài nguyên ổn tbỏ không giống, bởi vậy bạn Điện thoại tư vấn thủ tục addConverterFactory() trên builder cùng với tđắm đuối số là 1 trong những đối tượng người dùng của ScalarsConverterFactory. Sau cùng, chúng ta Call thủ tục build() nhằm sinh sản một đối tượng người dùng Retrofit.

Xem thêm: Cách Làm Rượu Gừng Nghệ Hạ Thổ Đơn Giản Và Hiệu Quả Nhất, Cách Ngâm Rượu Gừng Tốt Nhất

Ngay sau dưới Việc Call mang đến builder Retrofit, quan niệm một hình ảnh (interface) để tư tưởng cách Retrofit làm việc với website hệ thống thực hiện các đề xuất HTTP.. Khai báo retrofit2.http.GET và retrofit2.điện thoại tư vấn lúc được yêu cầu.

interface MarsApiService {