zoukankan      html  css  js  c++  java
  • Android Retrofit使用教程(二)

    上一篇文章讲述了Retrofit的简单使用,这次我们学习一下Retrofit的各种HTTP请求.

    Retrofit基础

    在Retrofit中使用注解的方式来区分请求类型.比如@GET("")表示一个GET请求,括号中的内容为请求的地址.

    格式含义
    @GET 表示这是一个GET请求
    @POST 表示这个一个POST请求
    @PUT 表示这是一个PUT请求
    @DELETE 表示这是一个DELETE请求
    @HEAD 表示这是一个HEAD请求
    @OPTIONS 表示这是一个OPTION请求
    @PATCH 表示这是一个PAT请求

    基本的HTTP请求

    Retrofit可实现基本HTTP请求,包括GET,POST,PUT,DELETE等.

    1.GET请求

    [代码]java代码:

    1
    2
    @GET("/record")
    Call<phoneresult> getResult();</phoneresult>

    2.POST请求

    [代码]java代码:

    1
    2
    @POST("/record")
    Call<phoneresult> getResult();</phoneresult>

    3.PUT请求.

    [代码]java代码:

    1
    2
    @PUT("/record")
    Call<phoneresult> getResult();</phoneresult>

    4.DELETE请求

    [代码]java代码:

    1
    2
    @DELETE("/record")
    Call<phoneresult> getResult();</phoneresult>

    服务器接口类型

    服务器接口有很多中,本人经验有限,目前接触较多为以下几种:

    直接请求型

    即直接对某一地址或组合某一地址发起请求

    如:对/result/result/{id}发起GET请求,其中{id}中的id在实际使用时填写实际值即可.

    带参查询型

    对某一地址进行带参查询请求

    如:https://www.baidu.com/s?wd=123为对接口https://www.baidu.com/s进行参数为wd=123GET查询请求.

    带Header型

     即请求时要求带上Header

    Retrofit中如何写?

    直接请求型

    1.如果是直接请求某一地址,写法如下:

    [代码]java代码:

    1
    2
    @GET("/record")
    Call<phoneresult> getResult();</phoneresult>

    2.如果是组合后直接请求,如/result/{id}写法如下:

    [代码]java代码:

    1
    2
    @GET("/result/{id}")
    Call<phoneresult> getResult(@Path("id") String id);</phoneresult>

    带参查询型

    如12306的查询接口https://kyfw.12306.cn/otn/lcxxcx/query?purpose_codes=ADULT&queryDate=2016-03-18&from_station=BJP&to_station=CDW,写法如下:

    [代码]java代码:

    1
    2
    3
    @GET("/otn/lcxxcx/query")
    Call<result> query(@Query("purpose_codes") String codes, @Query("queryDate") String date,
        @Query("from_station") String from, @Query("to_station") String to)</result>

    带Header型

    比如要更新某个账户信息,其接口地址为/info,需要带的Header有设备信息device,系统版本version,还要带请求参数要更新账户的id,代码如下:

    [代码]java代码:

    1
    2
    3
    @POST("/info")
    Call<object> updateInfo(@Header("device") String device, @Header("version") int version,
                            @Field("id") String id); <br></object>

    注:本想给每一种请求添加一个请求实例,但是确实不太好找.

    实例

    找了很久发现多说提供了一些POST请求接口,下面就以多说的接口为例,看一下如何使用Retrofit写请求.

    基础URL

    多说的接口基础地址为:http://api.duoshuo.com,则构建Retrofit实例代码如下:

    [代码]java代码:

    1
    2
    3
    4
    Retrofit retrofit = new Retrofit.Builder()
            .addConverterFactory(GsonConverterFactory.create())
            .baseUrl("http://api.duoshuo.com")
            .build();

    获取文章评论、转发数

    接口地址为:/threads/counts

    HTTP请求方式:GET

    请求示例为:http://api.duoshuo.com/threads/counts.json?short_name=official&threads=4ff1cbc43ae636b72a00001d

    后面的.json为返回数据的格式,此处我们使用json格式.

    请求代码如下:

    [代码]java代码:

    1
    2
    3
    @GET("/threads/counts.json")
    Call<object> getCommit(@Query("short_name") String shortName,
                           @Query("threads") String threads); <br></object>

    匿名发表新评论

    接口地址为:/posts/create

    HTTP请求方式:POST

    请求示例为:

    Request URL:http://api.duoshuo.com/posts/create.json
    Request Method:POST
    Post Data:short_name=official&author_email=jp.chenyang%40gmail.com&author_name=Perchouli&thread_id=1152923703638301959&author_url=http%3A%2F%2Fduoshuo.com&message=匿名发表新评论

    1.Field方式实现

    [代码]java代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    @FormUrlEncoded
    @POST("/posts/create.json")
    Call<commitresult> createCommit(@Field("secret") String secret,
                                    @Field("short_name") String shortName,
                                    @Field("author_email") String authorEmail,
                                    @Field("author_name") String authorName,
                                    @Field("thread_key") String threadKey,
                                    @Field("author_url") String author_url,
                                    @Field("message") String message);</commitresult>

    2.Field Map实现方式

    [代码]java代码:

    1
    2
    3
    @FormUrlEncoded
    @POST("/posts/create.json")
    Call<commitresult> createCommit(@FieldMap Map<string, string=""> map);</string,></commitresult>

    获取Map方式如下:

    [代码]java代码:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    public class CommitParam {
      
        private String short_name;
        private String author_email;
        private String author_name;
        private String thread_id;
        private String author_url;
        private String message;
      
        public String getShort_name() {
            return short_name;
        }
      
        public void setShort_name(String short_name) {
            this.short_name = short_name;
        }
      
        public String getAuthor_email() {
            return author_email;
        }
      
        public void setAuthor_email(String author_email) {
            this.author_email = author_email;
        }
      
        public String getAuthor_name() {
            return author_name;
        }
      
        public void setAuthor_name(String author_name) {
            this.author_name = author_name;
        }
      
        public String getThread_id() {
            return thread_id;
        }
      
        public void setThread_id(String thread_id) {
            this.thread_id = thread_id;
        }
      
        public String getAuthor_url() {
            return author_url;
        }
      
        public void setAuthor_url(String author_url) {
            this.author_url = author_url;
        }
      
        public String getMessage() {
            return message;
        }
      
        public void setMessage(String message) {
            this.message = message;
        }
      
        public Map<string, string=""> createCommitParams(){
            Map<string, string=""> params = new HashMap<>();
            params.put("short_name", short_name);
            params.put("author_email", author_email);
            params.put("author_name", author_name);
            params.put("thread_id", thread_id);
            params.put("author_url", author_url);
            params.put("message", message);
            return params;
        }
    }</string,></string,>

    项目地址在此:Dev-Wiki/RetrofitDemo

  • 相关阅读:
    BEM(Block–Element-Modifier)
    http://element.eleme.io/#/zh-CN/component/quickstart
    Commit message 的写法规范。本文介绍Angular 规范(
    好的commit应该长啥样 https://github.com/torvalds/linux/pull/17#issuecomment-5654674
    代码管理
    if you have content fetched asynchronously on pages where SEO is important, SSR might be necessary
    Martin Fowler’s Active Record design pattern.
    The Zen of Python
    Introspection in Python How to spy on your Python objects Guide to Python introspection
    Object-Oriented Metrics: LCOM 内聚性的度量
  • 原文地址:https://www.cnblogs.com/android-blogs/p/5752449.html
Copyright © 2011-2022 走看看