Retrofit使用教程

 1、网络、图片框架介绍,retrofit(需要okhttp和oki)、glide
    1.接口地址拼接,baseurl以/结尾,@get()内部要以字母开头
    2.get请求的操作
        1.@GET设置get的请求方式
        2.@Query 动态设置get请求参数
        3.{method}    @Path动态设置接口后缀
        4.@QueryMap 使用集合的形式传递数据
    3.post请求操作
         1.@post:设置post请求,必须要设置encode,@formUrlencoded
          2.@Field 设置post请求参数
           3.@FieldMap:设置post请求的集合参数
            4.@headers静态设置请求头,@header动态设置请求头


使用:
1、
compile 'com.squareup.retrofit2:retrofit:2.3.0'
2、创建接口
//1、创建接口
public interface Result {
    @GET("home")
    Call<ResponseBody> gethome();
}
3、
 //使用retrofit获取接口数据
        //2、创建出retrofit对象进行网络访问
        Retrofit retrofit = new Retrofit.Builder().baseUrl(baseUrl).build();
        Result result = retrofit.create(Result.class);
        Call<ResponseBody> call = result.gethome();
//        call.execute();  这是同步请求,一定是这个方法有回调后才能执行下面的代码

        // 这是异步请求,重新开启子线程进行网络请求好使操作
        call.enqueue(new Callback<ResponseBody>() {
            //返回成功:只代表服务器有响应
            @Override
            public void onResponse(Response<ResponseBody> response, Retrofit retrofit) {
                try {
                    String json = response.body().string();//一次请求一次回掉
                    //注意需要网络请求权限
                    System.out.println(json);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(Throwable throwable) {

            }
        });

4、接口拼接注意问题
 

5、接口方法中可以有多个方法。
        1\接口写死的参数方法
在接口中添加
//在接口地址上写死参数
@GET("search?page=0&pageNum=10&orderby=saleDown&keyword=奶粉")
Call<ResponseBody> getSearch();
在主线程中
Call<ResponseBody> call = result.getSearch();


//        call.execute();  这是同步请求,一定是这个方法有回调后才能执行下面的代码

// 这是异步请求,重新开启子线程进行网络请求好使操作
call.enqueue(new Callback<ResponseBody>() {
    //返回成功:只代表服务器有响应
    @Override
    public void onResponse(Response<ResponseBody> response, Retrofit retrofit) {
        try {
            String json = response.body().string();//一次请求一次回掉
            //注意需要网络请求权限
            System.out.println(json);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onFailure(Throwable throwable) {

    }
});

        2\接口中方法动态设置参数方法
在接口中
//动态设置接口参数@query 是注解直接将参数加载在search后面,一定要与我们接口文档中一模一样
@GET("search")
Call<ResponseBody> getSearch(@Query("page") int page, @Query("pageNum") int pageNum, @Query("orderby") String
        orderby, @Query("keyword") String keyword);
在主方法中
Call<ResponseBody> call = result.getSearch(1, 10, "saleDown", "奶粉");


//        call.execute();  这是同步请求,一定是这个方法有回调后才能执行下面的代码

// 这是异步请求,重新开启子线程进行网络请求好使操作
call.enqueue(new Callback<ResponseBody>() {
    //返回成功:只代表服务器有响应
    @Override
    public void onResponse(Response<ResponseBody> response, Retrofit retrofit) {
        try {
            String json = response.body().string();//一次请求一次回掉
            //注意需要网络请求权限
            System.out.println(json);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onFailure(Throwable throwable) {

    }
});

          3\
//动态设置接口后缀  {methodName}随便写的名字
@GET("{methodName}")
Call<ResponseBody> getSearch(@Path("methodName") String methodName, @Query("page") int page, @Query
        ("pageNum") int pageNum, @Query("orderby") String
        orderby, @Query("keyword") String keyword);

Call<ResponseBody> call = result.getSearch("search",1, 10, "saleDown", "奶粉");


           4\
//接口参数太多了,使用map集合的形式一次性传递数据
@GET("{methodName}")
Call<ResponseBody> getSearch(@Path("methodName") String methodName, @QueryMap Map<String, String> datas);

Map<String, String> datas = new HashMap<>();
datas.put("page", "0");
datas.put("pageNum", "10");
datas.put("orderby", "saleDown");
datas.put("keyword", "奶粉");
Call<ResponseBody> call = result.getSearch("search", datas);

       5\post
//post请求登入接口
@FormUrlEncoded//post请求必须加上encoded注解
@POST("login")
Call<ResponseBody> getLogin(@Field("username") String username, @Field("password") String password);

@FormUrlEncoded//post请求必须加上encoded注解
@POST("{name}")
Call<ResponseBody> getLogin(@Path("name") String name, @Field("username") String username, @Field("password")
        String password);

@FormUrlEncoded//post请求必须加上encoded注解
@POST("{name}")
Call<ResponseBody> getLogin(@Path("name") String name, @FieldMap Map<String, String> dates);

//        Call<ResponseBody> call = result.getLogin("test", "test");
//        Call<ResponseBody> call = result.getLogin("login","test", "test");
Map<String, String> datas = new HashMap<>();
datas.put("username", "test");
datas.put("password", "test");
Call<ResponseBody> call = result.getLogin("login", datas);

        6\账户中心
//账户中心  添加请求头  静态设置请求头
@Headers("userid:20428")
@GET("userinfo")
Call<ResponseBody> getUserInfo();

//账户中心  添加请求头  动态设置请求头
@GET("userinfo")
Call<ResponseBody> getUserInfo(@Header("userid") int userid);

//        Call<ResponseBody> call = result.getUserInfo();
Call<ResponseBody> call = result.getUserInfo(20428);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值