Retrofit简单学习

简单上手

依赖:

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 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 call = testService.getBaidu();
//用法和OkHttp的call如出一辙,不同的是它的回调在主线程;
call.enqueue(new Callback() {
    @Override
    public void onResponse(Call call,Response response) {
        //请求成功的回调,该方法在主线程执行
    }
    @Override
    public void onFailure(Call call, Throwable t) {
        //该方法在主线程执行
    }
});

带参数GET的请求

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

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

然后我们在Activity中如下:

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://localhost/")
                .build();
TestService testService = retrofit.create(TestService.class);
Call call = testService.toLogin();
call.enqueue(new Callback() {
    @Override
    public void onResponse(Call call,Response response) {
    }
    @Override
    public void onFailure(Call 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 toLogin(@Query("username") String username,
                            @Query("password") String password);

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

POST请求

你可能感兴趣的:(Retrofit简单学习)