资讯专栏INFORMATION COLUMN

[原创]Retrofit使用教程(二)

wanghui / 3394人阅读

摘要:上一篇文章讲述了的简单使用这次我们学习一下的各种请求基础在中使用注解的方式来区分请求类型比如表示一个请求括号中的内容为请求的地址格式含义表示这是一个请求表示这个一个请求表示这是一个请求表示这是一个请求表示这是一个请求表示这是一个请求表示这是

上一篇文章讲述了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请求

@GET("/record")
Call getResult();

2.POST请求

@POST("/record")
Call getResult();

3.PUT请求

@PUT("/record")
Call getResult();

4.DELETE请求

@DELETE("/record")
Call getResult();
服务器接口类型

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

直接请求型

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

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

带参查询型

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

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

带Header型

 即请求时要求带上Header

Retrofit中如何写? 直接请求型

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

@GET("/record")
Call getResult();

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

@GET("/result/{id}")
Call getResult(@Path("id") String id);
带参查询型

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

@GET("/otn/lcxxcx/query")
Call query(@Query("purpose_codes") String codes, @Query("queryDate") String date,
    @Query("from_station") String from, @Query("to_station") String to)
带Header型

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

@POST("/info")
Call updateInfo(@Header("device") String device, @Header("version") int version,
                        @Field("id") String id);

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

实例

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

基础URL

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

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格式.

请求代码如下:

@GET("/threads/counts.json")
Call getCommit(@Query("short_name") String shortName,
                       @Query("threads") String threads);
匿名发表新评论

接口地址为:/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方式实现

    @FormUrlEncoded
    @POST("/posts/create.json")
    Call 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);

2.Field Map实现方式

    @FormUrlEncoded
    @POST("/posts/create.json")
    Call createCommit(@FieldMap Map map);

获取Map方式如下:

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 createCommitParams(){
        Map 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;
    }
}

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

更多文章请移步我的博客:DevWiki Blog

重要说明

想随时获取最新博客文章更新,请关注公共账号DevWiki,或扫描下面的二维码:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65648.html

相关文章

  • [原创]Retrofit使用教程(一)

    摘要:公司开源了许多优秀的库,就是其中之一。是用来简化访问服务器,如果你的服务器使用的使,那么赶紧使用吧。官方的文档是用的说明使用过程的,有的童鞋可能从没用过的比如我,为了简单易懂,这里我使用一个查询手机归属地的来说明的使用过程。 Square公司开源了许多优秀的库,Retrofit就是其中之一。 Retrofit是用来简化APP访问服务器API,如果你的服务器使用的使RESTAPI,那么赶...

    codeGoogle 评论0 收藏0

发表评论

0条评论

wanghui

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<