美文网首页
Retrofit简单学习

Retrofit简单学习

作者: 云米 | 来源:发表于2017-07-20 14:16 被阅读0次

    简单上手

    依赖:

    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    //可选
    compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'//ConverterFactory的Gson依赖包
    compile 'com.squareup.retrofit2:converter-scalars:2.0.0-beta4'//ConverterFactory的String依赖包
    

    上面的2个可选依赖库是用来在Retrofit调用返回时候做类型转换用的,现在我们先忽略;

    无参GET请求

    先创建一个接口,定义如下:

    public interface TestService{
        //@GET表示一个GET请求,参数无(参数无可以写 . 或者 / 但是不能不写,会报错)
        @GET("/")
        Call<ResponseBody> getBaidu();
    }
    

    接着我们在MainActivity中如下操作:

    //创建retrofit实例,注意baseUrl的参数是必须以“/”结尾的,不然会报url错误异常;
    Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl("https://www.baidu.com/")
                    .build();
    //用Retrofit创建一个TestService的代理对象(我们没有办法直接调用TestService接口里面的方法)
    TestService testService = retrofit.create(TestService.class);
    //拿到代理对象,然后调用该方法
    Call<ResponseBody> call = testService.getBaidu();
    //用法和OkHttp的call如出一辙,不同的是它的回调在主线程;
    call.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call,Response<ResponseBody> response) {
            //请求成功的回调,该方法在主线程执行
        }
        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            //该方法在主线程执行
        }
    });
    

    带参数GET的请求

    我们以一个登录操作为例子
    我们在上面的接口中加入另外一个方法:

    public interface TestService{
        //@GET表示一个GET请求,参数无(参数无可以写 . 或者 / 但是不能不写,会报错)
        @GET("/")
        Call<ResponseBody> getBaidu();
        
        @GET("test/login.php")//这里是有path路径的
        Call<ResponseBody> toLogin(@QueryMap Map<String ,String> map);
    }
    

    然后我们在Activity中如下:

    Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl("https://localhost/")
                    .build();
    TestService testService = retrofit.create(TestService.class);
    Call<ResponseBody> call = testService.toLogin();
    call.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call,Response<ResponseBody> response) {
        }
        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
        }
    });
    

    注意:上面例子的完整URL是https://localhost/test/login.php,Retrofit的baseUrl的参数是https://localhost/,也就是url的host部分,我们不能在baseUrl中把后面的path路径test/login.php也加进去,一旦你加进去,最后底层请求url就变成了https://localhost/?username=123&password=123,后面的path路径给截掉了。所以我们只能在定义接口的地方把path路径给加进去;@GET(test/login.php)

    另外我们在接口的方法中还可如下操作:

    @GET("test/login.php")//这里是有path路径的
    Call<ResponseBody> toLogin(@Query("username") String username,
                                @Query("password") String password);
    

    这里@Query("username")就是键,后面的username就是具体的值了,值得注意的是Get和Post请求,都可以这样填充参数的;

    POST请求

    相关文章

      网友评论

          本文标题:Retrofit简单学习

          本文链接:https://www.haomeiwen.com/subject/nlndkxtx.html