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<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请求

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,099评论 19 139
  • MVP 字母的含义 Retrofit 使用步骤(依赖接口的形式) 使用Retrofit服务器最好返回的是一个cod...
    落叶随风花落入泥阅读 381评论 0 0
  • 经过对django的初步学习,我们已经对后台的基本流程以及django的运作有了一定的了解,但是这还不足够,dja...
    coder_ben阅读 3,861评论 8 34
  • 此段内容简要来自自强学堂的教程详情请查询自强学堂 一、 后台的运作流程 接收request请求 处理数据 获取请求...
    coder_ben阅读 5,260评论 6 56
  • “盛糖”大国:中国人不信,美国人却猜中了。这话肯定不招人待见,但事实是除了种群遗传因素外,也有一部分是我们...
    莫逸语阅读 354评论 0 2