频道栏目
首页 > 资讯 > 其他 > 正文

retrofit操作学习之发送get和post请求

18-07-13        来源:[db:作者]  
收藏   我要投稿

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注解一起使用否则会报错
     * <p>
     * #@Field或@FieldMap注解添加的参数会以 key1=value1&key2=value2&key3=value3
     * 的格式在post的请求体中存在
     * <p/>
     */
    @POST("/")
    @FormUrlEncoded
    Call<ResponseBody> postRequest(@Field("a") String a, @FieldMap(encoded = true) Map<String, String> fieldMap);


    /**
     * 发送Json格式的请求体(需要借助Gson)
     * 使用@Body注解,比如User类,如果是JSON格式 retrofit 必须指定converter
     * <p>
     * retrofit支持Gson, 所以可以使用,将对象映射成json格式
     * builder.baseUrl("http://square.github.io/")
     * .addConverterFactory(GsonConverterFactory.create());
     */
    @POST("/")
    Call<ResponseBody> postRequestWithBody(@Body User user);
}
相关TAG标签
上一篇:关于linux虚拟机或服务器在windows下映射网络文件夹的操作步骤
下一篇:关于Java终止线程的三种方法介绍
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站