欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2022-09-02 19:42:10
GET请求(获取资源) 用来请求访问已被URI识别的资源,指定的资源经服务端解析后返回响应内容。对于Retrofit2.0中的Get请求: 使用 @QuerryMap 或者@Q...

GET请求(获取资源)

用来请求访问已被URI识别的资源,指定的资源经服务端解析后返回响应内容。对于Retrofit2.0中的Get请求:
使用 @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 getInfo(@Query String("name") String name,
                                 @Query("sex") String sex,
                                 @Query("food") String food);

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

网络请求:

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

   });

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

   });

POST请求(传输实体主体)

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 getPerson(@Field("name") String name,@Field("sex") String sex);

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

    }

网络请求:

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

   });

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

   });
直接使用表单 @Part 或者@PartMap

PUT请求(传输文件)