android web service clientahnelson/csce4623/lectures/lecture16.pdfandroid web service client...
TRANSCRIPT
![Page 1: Android Web Service Clientahnelson/CSCE4623/lectures/lecture16.pdfAndroid Web Service Client Alexander Nelson November 15, 2019 University of Arkansas - Department of Computer Science](https://reader033.vdocument.in/reader033/viewer/2022042223/5ec98fecf931947a177dd2e5/html5/thumbnails/1.jpg)
Android Web Service Client
Alexander Nelson
November 15, 2019
University of Arkansas - Department of Computer Science and Computer Engineering
![Page 2: Android Web Service Clientahnelson/CSCE4623/lectures/lecture16.pdfAndroid Web Service Client Alexander Nelson November 15, 2019 University of Arkansas - Department of Computer Science](https://reader033.vdocument.in/reader033/viewer/2022042223/5ec98fecf931947a177dd2e5/html5/thumbnails/2.jpg)
Java Interfaces
![Page 3: Android Web Service Clientahnelson/CSCE4623/lectures/lecture16.pdfAndroid Web Service Client Alexander Nelson November 15, 2019 University of Arkansas - Department of Computer Science](https://reader033.vdocument.in/reader033/viewer/2022042223/5ec98fecf931947a177dd2e5/html5/thumbnails/3.jpg)
Java Interface
A Java Interface is a collection of related methods with empty
bodies
Typically, a class will implement an interface
This forces the programmer to implement certain methods so that
the class will be type safe
![Page 4: Android Web Service Clientahnelson/CSCE4623/lectures/lecture16.pdfAndroid Web Service Client Alexander Nelson November 15, 2019 University of Arkansas - Department of Computer Science](https://reader033.vdocument.in/reader033/viewer/2022042223/5ec98fecf931947a177dd2e5/html5/thumbnails/4.jpg)
Example
Example Interface and implementing class
![Page 5: Android Web Service Clientahnelson/CSCE4623/lectures/lecture16.pdfAndroid Web Service Client Alexander Nelson November 15, 2019 University of Arkansas - Department of Computer Science](https://reader033.vdocument.in/reader033/viewer/2022042223/5ec98fecf931947a177dd2e5/html5/thumbnails/5.jpg)
Retrofit
![Page 6: Android Web Service Clientahnelson/CSCE4623/lectures/lecture16.pdfAndroid Web Service Client Alexander Nelson November 15, 2019 University of Arkansas - Department of Computer Science](https://reader033.vdocument.in/reader033/viewer/2022042223/5ec98fecf931947a177dd2e5/html5/thumbnails/6.jpg)
Retrofit – HTTP API for Java
Type-safe HTTP Client for Java
Builds API from a Java Interface
Each method is specified with an HTTP annotation and URL
Example:
public interface GitHubService {@GET(“users/user/repos”)
Call<List<Repo>>listRepos(@Path(“user”) String user);
}
![Page 7: Android Web Service Clientahnelson/CSCE4623/lectures/lecture16.pdfAndroid Web Service Client Alexander Nelson November 15, 2019 University of Arkansas - Department of Computer Science](https://reader033.vdocument.in/reader033/viewer/2022042223/5ec98fecf931947a177dd2e5/html5/thumbnails/7.jpg)
Retrofit Instance
Retrofit class generates an implementation of the API from the
defined interface
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(“https://api.github.com/”)
.build();
GitHubService service = retrofit.create(GitHubService.class)
![Page 8: Android Web Service Clientahnelson/CSCE4623/lectures/lecture16.pdfAndroid Web Service Client Alexander Nelson November 15, 2019 University of Arkansas - Department of Computer Science](https://reader033.vdocument.in/reader033/viewer/2022042223/5ec98fecf931947a177dd2e5/html5/thumbnails/8.jpg)
Call Interface
Retrofit implements a generic type Call interface that:
• Performs HTTP requests
• Handles HTTP responses
• Deserializes responses into the Typed class
Example:
Call<List<Repo>> repos =
service.listRepos(“alexanderhnelson”);
![Page 9: Android Web Service Clientahnelson/CSCE4623/lectures/lecture16.pdfAndroid Web Service Client Alexander Nelson November 15, 2019 University of Arkansas - Department of Computer Science](https://reader033.vdocument.in/reader033/viewer/2022042223/5ec98fecf931947a177dd2e5/html5/thumbnails/9.jpg)
Annotations
Interface annotations enable flexible behavior
Describes the HTTP Requests by:
• URL Parameter replacement
• Query parameter support
• Object conversion to request body
• Multipart request body and file upload
![Page 10: Android Web Service Clientahnelson/CSCE4623/lectures/lecture16.pdfAndroid Web Service Client Alexander Nelson November 15, 2019 University of Arkansas - Department of Computer Science](https://reader033.vdocument.in/reader033/viewer/2022042223/5ec98fecf931947a177dd2e5/html5/thumbnails/10.jpg)
API Declaration
Every method must have an HTTP annotation that provides
1. Request method
2. Relative URL of the resource
Built-in request annotations:
• HEAD
• GET
• POST
• PUT
• DELETE
![Page 11: Android Web Service Clientahnelson/CSCE4623/lectures/lecture16.pdfAndroid Web Service Client Alexander Nelson November 15, 2019 University of Arkansas - Department of Computer Science](https://reader033.vdocument.in/reader033/viewer/2022042223/5ec98fecf931947a177dd2e5/html5/thumbnails/11.jpg)
Specifying Parameters
Parameters may be specified in the URL
Example:
@GET(“users/list?sort=desc”)
![Page 12: Android Web Service Clientahnelson/CSCE4623/lectures/lecture16.pdfAndroid Web Service Client Alexander Nelson November 15, 2019 University of Arkansas - Department of Computer Science](https://reader033.vdocument.in/reader033/viewer/2022042223/5ec98fecf931947a177dd2e5/html5/thumbnails/12.jpg)
URL Manipulation
URL can be updated dynamically using replacements and
parameters
A replacement block can be included in the URL
Replacement block defined by a string surrounded by curly braces
“{}”
Example:
@GET(”group/{id}/users”)
Call<List<User>> groupList(@Path(“id”) int groupId);
When this method is called, creates a GET request with the
specified ID
![Page 13: Android Web Service Clientahnelson/CSCE4623/lectures/lecture16.pdfAndroid Web Service Client Alexander Nelson November 15, 2019 University of Arkansas - Department of Computer Science](https://reader033.vdocument.in/reader033/viewer/2022042223/5ec98fecf931947a177dd2e5/html5/thumbnails/13.jpg)
Query Parameters
Query Parameters can be added
(i.e. what shows up after the ? on a REST URL)
Example:
@GET(”group/id/users”)
Call<List<User>> groupList(@Path(“id”) int groupId,
@Query(“sort”) String sort);
Creates a GET at BASE URL/group/id/users?sort=(sort)
![Page 14: Android Web Service Clientahnelson/CSCE4623/lectures/lecture16.pdfAndroid Web Service Client Alexander Nelson November 15, 2019 University of Arkansas - Department of Computer Science](https://reader033.vdocument.in/reader033/viewer/2022042223/5ec98fecf931947a177dd2e5/html5/thumbnails/14.jpg)
Creating Complex Queries
Complex queries can be created using a Map object
@GET(”group/id/users”)
Call<List<User>> groupList(@Path(“id”) int groupId,
@QueryMap Map<String, String> options);
![Page 15: Android Web Service Clientahnelson/CSCE4623/lectures/lecture16.pdfAndroid Web Service Client Alexander Nelson November 15, 2019 University of Arkansas - Department of Computer Science](https://reader033.vdocument.in/reader033/viewer/2022042223/5ec98fecf931947a177dd2e5/html5/thumbnails/15.jpg)
Passing Objects
The HTTP Body can be specified using a Java Object with the
@Body tag
@POST(“users/new”)
Call<User> createUser(@Body User user);
![Page 16: Android Web Service Clientahnelson/CSCE4623/lectures/lecture16.pdfAndroid Web Service Client Alexander Nelson November 15, 2019 University of Arkansas - Department of Computer Science](https://reader033.vdocument.in/reader033/viewer/2022042223/5ec98fecf931947a177dd2e5/html5/thumbnails/16.jpg)
Sending Form Encoded data
Methods can be declared to encode data in form-fields
Use @FormUrlEncoded tag with the HTTP Request
@FormUrlEncoded
@POST(“user/edit”)
Call<User> updateUser(@Field(“first name”) String first,
@Field(“last name”) String last);
![Page 17: Android Web Service Clientahnelson/CSCE4623/lectures/lecture16.pdfAndroid Web Service Client Alexander Nelson November 15, 2019 University of Arkansas - Department of Computer Science](https://reader033.vdocument.in/reader033/viewer/2022042223/5ec98fecf931947a177dd2e5/html5/thumbnails/17.jpg)
Multipart Requests
Create Multipart requests using the @Multipart annotation
Add parts using the @Part annotation in the method definition
Example:
@Multipart
@PUT(”user/photo”)
Call<User> updateUser(@Part(“photo”) RequestBody photo,
@Part(“description”) RequestBody description);
![Page 18: Android Web Service Clientahnelson/CSCE4623/lectures/lecture16.pdfAndroid Web Service Client Alexander Nelson November 15, 2019 University of Arkansas - Department of Computer Science](https://reader033.vdocument.in/reader033/viewer/2022042223/5ec98fecf931947a177dd2e5/html5/thumbnails/18.jpg)
Manipulating Headers
Set static headers for a method with the @Headers annotation
Example:
@Headers({”Accept: application/vnd.github.v3.full+json”,
”User-Agent: Retrofit-Sample-App”
})@GET(”users/{username}”)
Call<User> getUser(@Path(“username”) String username);
![Page 19: Android Web Service Clientahnelson/CSCE4623/lectures/lecture16.pdfAndroid Web Service Client Alexander Nelson November 15, 2019 University of Arkansas - Department of Computer Science](https://reader033.vdocument.in/reader033/viewer/2022042223/5ec98fecf931947a177dd2e5/html5/thumbnails/19.jpg)
Dynamic Headers
Headers can be manipulated dynamically in the method definition
using the @Header tag
Example:
@GET(“user”)
Call<User> getUser(@Header(“Authorization”) String
authorization);
![Page 20: Android Web Service Clientahnelson/CSCE4623/lectures/lecture16.pdfAndroid Web Service Client Alexander Nelson November 15, 2019 University of Arkansas - Department of Computer Science](https://reader033.vdocument.in/reader033/viewer/2022042223/5ec98fecf931947a177dd2e5/html5/thumbnails/20.jpg)
Common Headers
If all requests need the same headers
Use an OkHttp interceptor
https://github.com/square/okhttp/wiki/Interceptors
![Page 21: Android Web Service Clientahnelson/CSCE4623/lectures/lecture16.pdfAndroid Web Service Client Alexander Nelson November 15, 2019 University of Arkansas - Department of Computer Science](https://reader033.vdocument.in/reader033/viewer/2022042223/5ec98fecf931947a177dd2e5/html5/thumbnails/21.jpg)
Retrofit Configuration
Conversion and deserialization
By default, Retrofil will only deseralize to a particular type
(OkHttp ResponseBody)
Allows for conversion to other types using a converter
For JSON, the GSON library is available
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(”my.api.url.com”)
.addConverterFactory(GsonConverterFactory.create())
.build();