zoukankan      html  css  js  c++  java
  • 【转】Retrofit

    Retrofit

    一个java平台下开源的http的封装。

    API Declaration

    Annotations on the interface methods and its parameters indicate how a request will be handled.

    REQUEST METHOD

    Every method must have an HTTP annotation that provides the request method and relative URL. There are five built-in annotations: GETPOSTPUTDELETE, and HEAD. The relative URL of the resource is specified in the annotation.

    @GET("users/list")

    You can also specify query parameters in the URL.

    @GET("users/list?sort=desc")

    URL MANIPULATION

    A request URL can be updated dynamically using replacement blocks and parameters on the method. A replacement block is an alphanumeric string surrounded by { and }. A corresponding parameter must be annotated with @Path using the same string.

    @GET("group/{id}/users")
    Call<List<User>> groupList(@Path("id") int groupId);

    Query parameters can also be added.

    @GET("group/{id}/users")
    Call<List<User>> groupList(@Path("id") int groupId, @Query("sort") String sort);

    For complex query parameter combinations a Map can be used.

    @GET("group/{id}/users")
    Call<List<User>> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options);

    REQUEST BODY

    An object can be specified for use as an HTTP request body with the @Body annotation.

    @POST("users/new")
    Call<User> createUser(@Body User user);

    The object will also be converted using a converter specified on the Retrofit instance. If no converter is added, only RequestBody can be used.

    FORM ENCODED AND MULTIPART

    Methods can also be declared to send form-encoded and multipart data.

    Form-encoded data is sent when @FormUrlEncoded is present on the method. Each key-value pair is annotated with @Fieldcontaining the name and the object providing the value.

    @FormUrlEncoded
    @POST("user/edit")
    Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);

    Multipart requests are used when @Multipart is present on the method. Parts are declared using the @Part annotation.

    @Multipart
    @PUT("user/photo")
    Call<User> updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description);

    Multipart parts use one of Retrofit's converters or they can implement RequestBody to handle their own serialization.

    HEADER MANIPULATION

    You can set static headers for a method using the @Headers annotation.

    @Headers("Cache-Control: max-age=640000")
    @GET("widget/list")
    Call<List<Widget>> widgetList();
    @Headers({
        "Accept: application/vnd.github.v3.full+json",
        "User-Agent: Retrofit-Sample-App"
    })
    @GET("users/{username}")
    Call<User> getUser(@Path("username") String username);

    Note that headers do not overwrite each other. All headers with the same name will be included in the request.

    A request Header can be updated dynamically using the @Header annotation. A corresponding parameter must be provided to the @Header. If the value is null, the header will be omitted. Otherwise, toString will be called on the value, and the result used.

    @GET("user")
    Call<User> getUser(@Header("Authorization") String authorization)

    Headers that need to be added to every request can be specified using an OkHttp interceptor.

    SYNCHRONOUS VS. ASYNCHRONOUS

    Call instances can be executed either synchronously or asynchronously. Each instance can only be used once, but calling clone() will create a new instance that can be used.

    On Android, callbacks will be executed on the main thread. On the JVM, callbacks will happen on the same thread that executed the HTTP request.

    Retrofit Configuration

    Retrofit is the class through which your API interfaces are turned into callable objects. By default, Retrofit will give you sane defaults for your platform but it allows for customization.

    CONVERTERS

    By default, Retrofit can only deserialize HTTP bodies into OkHttp's ResponseBody type and it can only accept its RequestBody type for @Body.

    Converters can be added to support other types. Six sibling modules adapt popular serialization libraries for your convenience.

    • Gsoncom.squareup.retrofit2:converter-gson
    • Jacksoncom.squareup.retrofit2:converter-jackson
    • Moshicom.squareup.retrofit2:converter-moshi
    • Protobufcom.squareup.retrofit2:converter-protobuf
    • Wirecom.squareup.retrofit2:converter-wire
    • Simple XMLcom.squareup.retrofit2:converter-simplexml
    • Scalars (primitives, boxed, and String): com.squareup.retrofit2:converter-scalars

    Here's an example of using the GsonConverterFactory class to generate an implementation of the GitHubService interface which uses Gson for its deserialization.

    Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://api.github.com")
        .addConverterFactory(GsonConverterFactory.create())
        .build();
    
    GitHubService service = retrofit.create(GitHubService.class);

    CUSTOM CONVERTERS

    If you need to communicate with an API that uses a content-format that Retrofit does not support out of the box (e.g. YAML, txt, custom format) or you wish to use a different library to implement an existing format, you can easily create your own converter. Create a class that extends the Converter.Factory class and pass in an instance when building your adapter.

    Download

    ↓ Latest JAR

    The source code to the Retrofit, its samples, and this website is available on GitHub.

    MAVEN

    <dependency>
      <groupId>com.squareup.retrofit2</groupId>
      <artifactId>retrofit</artifactId>
      <version>(insert latest version)</version>
    </dependency>

    GRADLE

    compile 'com.squareup.retrofit2:retrofit:(insert latest version)'
    

    Retrofit requires at minimum Java 7 or Android 2.3.

    for more information please visit http://square.github.io/retrofit/#api-declaration

    ---恢复内容结束---

  • 相关阅读:
    把Windows装进U盘
    Java 潜拷贝和深拷贝(浅复制和深复制)
    《远大前程——从软件新手到行业大牛》读书笔记
    解决windows8 metro应用不能联网
    [转载]schtasks命令使用实例介绍
    程序员网址
    VS2008,vs2010 快捷键大全 转载
    题解:2018级算法第一次练习赛 妙妙趣排序
    题解:2018级算法第一次上机 C1pair
    #编译原理# 词法分析(三)第二部分
  • 原文地址:https://www.cnblogs.com/hager/p/6419207.html
Copyright © 2011-2022 走看看