retrofit笔记一:发送get和post请求

Retrofit是一个网络操作接口框架,底部真正进行网络请求实现的是OkHttp。

Retrofit使用步骤:

1、定义一个接口
public interface HttpService {
    /**
    * 定义请求方法
    */
    @GET("/")
    Call getRequestNoParams();
}

2、构建接口对象(动态代理构建我们定义接口的对象)
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://square.github.io/")
.build();
HttpService httpService = retrofit.create(HttpService.class);

3、发送请求
Call call = httpService.getRequestNoParams();
call.enqueue(xx)//异步请求,接口回调在子线程
call.execute()//同步请求

发送get请求示例

//1、构建Retrofit
Retrofit.Builder builder = new Retrofit.Builder();
        builder.baseUrl("https://www.baidu.com/");
Retrofit retrofit = builder.build();

//2、定义接口
public interface HttpService {
     /***
     * 直接访问,不带任何参数,此处注解@GET必须加一个“/”,否则会报错
     */
    @GET("/")
    Call getRequest();


    /**
     * 希望动态修改url路径使用@Path注解,希望动态修改的参数用{}进行标记
     * 如本例{id},@Path注解中value=“id”
     */
    @GET("/{id}/user")
    Call getRequest(@Path(value = "id", encoded = true) String id);

    /**
     * 添加静态的头使用@Headers注解,格式如例子“key:value”
     */
    @GET("/id/user")
    @Headers({
            "a:1",
            "b:2",
    })
    Call getRequest();

    /**
     * 动态添加头使用@Header或HeaderMap注解,一个是添加一个一个是添加一组,
     * 注解中填入的key1就是key,参数String value就是对于的值
     * 注意此处静态头中也定义了key1,动态头key1不会覆盖静态头,两个都会存在,
     * 最终的结果就是
     * 

* key1:value1 * key2:value2 * key1:value *

* * @return */
@GET("/id/user") @Headers({ "key1:value1", "key2:value2" }) Call getRequest(@Header("key1") String value, @HeaderMap Map headerMap); /** * 携带url请求参数使用@Query或者@QueryMap * # @Query是添加一个请求参数如本例子 key = key,value = value * # @QueryMap 是添加很多的参数,以map的形式提供 * 最终请求结果就是: * xxxx/id/user?key1=value1&key2=value2 */ @GET("/id/user") Call getRequest(@Query(value = "key", encoded = true) String value, @QueryMap(encoded = true) Map queryMap); /** * Get请求综合操作 */ @GET("/{id}/user") @Headers({ "key1:value1", "key2:value2" }) Call getRequest(@Path(value = "id",encoded = true) String id, @HeaderMap Map headMap, @QueryMap(encoded = true) Map queryMap); } //3、发送请求 HttpService httpService = retrofit.create(HttpService.class); Call call = httpService.getRequestNoParams(); call.enqueue(new Callback() {//发送异步请求 @Override public void onResponse(Call call, Response response) { } @Override public void onFailure(Call call, Throwable t) { } }); //Response execute = requestWithParams.execute();;//发送同步请求

发送Post请求示例

只给出接口了,Post和Get请求的区别就是Post可以携带请求体,其他和Get基本是一样的,所以上面的注解也同样适用于Post请求。下面示例Post的请求示例

public interface HttpService{
     /**
     * 发送表单形式的请求体
     * 使用@Field(添加一个)或者@FieldMap(添加多个)注解添加表单形式的请求体,
     * 必须要和@FormUrlEncoded注解一起使用否则会报错
     * 

* #@Field@FieldMap注解添加的参数会以 key1=value1&key2=value2&key3=value3 * 的格式在post的请求体中存在 *

*/ @POST("/") @FormUrlEncoded Call postRequest(@Field("a") String a, @FieldMap(encoded = true) Map fieldMap); /** * 发送Json格式的请求体(需要借助Gson) * 使用@Body注解,比如User类,如果是JSON格式 retrofit 必须指定converter *

* retrofit支持Gson, 所以可以使用,将对象映射成json格式 * builder.baseUrl("http://square.github.io/") * .addConverterFactory(GsonConverterFactory.create()); */ @POST("/") Call postRequestWithBody(@Body User user); }

你可能感兴趣的:(第三方框架)