您的位置:首页 > 移动开发 > Android开发

[Android] Retrofit源码解析之POST、GET请求

2018-03-09 21:33 267 查看
需要注意的是:下面说的GET请求和POST请求里面的@的方法,不是说只属于它们自己,灵活点。比如@path既适用于@GET也适用于@POST

GET请求(获取资源)

用来请求访问已被URI识别的资源,指定的资源经服务端解析后返回响应内容。对于Retrofit2.0中的Get请求:

@Url

作用:直接传入一个请求的 URL变量 用于URL设置
具体使用:
public interface MyService {
@GET
Call<Bean> getInfo(@Url String url, @Query String("name") String name);
// 当有URL注解时,@GET传入的URL就可以省略
// 当GET、POST...HTTP等方法中没有设置Url时,则必须使用 {@link Url}提供

}


@path 动态更改位于URL中的路径

public interface MyService {
@GET("api/{page}")
Call<Bean>  getInfo(@Path("page") String page);
// 访问的API是:www.baidu.com/api/{page}
// 在发起请求时, {user} 会被替换为方法的第一个参数 user(被@Path注解作用)
}


使用 @QuerryMap 或者@Querry

HTTP请求的完整URL是:www.baidu.com/api?name=allen&sex=male&food=apple

基础URL:

BaseUrl = "www.baidu.com/";


请求方式:

public interface MyService {

//第一种
@GET("api? ")
Call<Bean> getInfo(@Query String("name") String name,
@Query("sex") String sex,
@Query("food") String food);

//第二种和第一种是一样的
@GET("api? ")
Call<Bean> getInfo(@QueryMap HashMap<String,String> map);
}


网络请求:

//第一种
Call<Bean> call = MyService .getInfo( "allen","male","apple");
call.enqueue(new Callback<Bean>() {
......
.........
...............

});

//第二种
HashMap<String, String> myHashMap = new HashMap<>();
myHashMap .put ("name", allen);
myHashMap .put ("sex", male);
myHashMap .put ("food", apple);
Call<Bean> call = MyService .getInfo(myHashMap);
call.enqueue(new Callback<Bean>() {
......
.........
...............

});


POST请求(传输实体主体)

四种常见的 POST 提交数据方式对应的content-type取值

- POST请求一般分为两种传输实体到后台,表单和JSON

使用表单 @FieldMap 或者@Field

HTTP请求的完整URL是:www.baidu.com/api

通过表单提交,注意的是传输的时候表单需要进行UrlEncode编码

参数Parameters为name,Vaule为allen。

参数Parameters为sex,Vaule为male。

基础URL:

BaseUrl = "www.baidu.com/";


请求方式:

public interface MyService {

//第一种
@FormUrlEncoded
@POST("api")
Call<Bean> getPerson(@Field("name") String name,@Field("sex") String sex);

//第二种和第一种是相同的
@FormUrlEncoded
@POST("api")
Call<Bean> getPerson(@FieldMap HashMap<String,String> map);

}


网络请求:

//第一种
Call<Bean> call = MyService .getPerson( "allen","male");
call.enqueue(new Callback<Bean>() {
......
.........
...............

});

//第二种
HashMap<String, String> myHashMap = new HashMap<>();
myHashMap .put ("name", allen);
myHashMap .put ("sex", male);
Call<Bean> call = MyService .getPerson(myHashMap);
call.enqueue(new Callback<Bean>() {
......
.........
...............

});


直接使用表单 @Part 或者@PartMap

HTTP请求的完整URL是:www.baidu.com/api

通过表单提交,一般用于文件的上传。

参数Parameters为name,Vaule为allen。

参数Parameters为sex,Vaule为male。

基础URL:

BaseUrl = "www.baidu.com/";


请求方式:

参考资料:

这是一份很详细的 Retrofit 2.0 使用教程(含实例讲解)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: