第三方开源库:retrofit

参考:
android 介绍Retrofit的简单使用
急速开发系列——Retrofit实战技巧

简介

retrofit是一种网络请求框架,内部是通过okHttp实现的

gradle

使用retrofit需要在module的dependencies添加依赖:

dependencies {
    ...
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    ...
}

如果需要用retrofit自带的gson来解析数据,那么需要添加下面的解析方式,但是须知道json格式

//使用Gson解析,
compile 'com.squareup.retrofit2:converter-gson:2.1.0'

如果自己解析json数据,那么需要添加:

//得到的数据是String类型
compile 'com.squareup.retrofit2:converter-scalars:2.1.0'

这里需要值得注意的是导入的retrofit2包的版本必须要一致,否则就会报错。

代码使用步骤

  1. 创建接口
  2. 创建Retrofit对象
  3. 获取创建的接口
  4. 调用接口里面的方法,获取Call
  5. 请求网络
String baseUrl = "http://apis.juhe.cn/ip/";
 //1 创建retrogit对象
 Retrofit retrofit = new Retrofit.Builder()
         .addConverterFactory(ScalarsConverterFactory.create())
         .addConverterFactory(GsonConverterFactory.create())
         .baseUrl(baseUrl)
         .build();
 //2 获取appUrl
 AppUrl appUrl = retrofit.create(AppUrl.class);
 //3 获取call
 Call<String> call = appUrl.get3("192.168.1.12", "25de166737ce8c442bbcd70afc44f665");
 //4 执行请求
 call.enqueue(new Callback<String>() {
     @Override
     public void onResponse(Call<String> call, Response<String> response) {
         Logger.d("response=" + response.body().toString());
     }

     @Override
     public void onFailure(Call<String> call, Throwable t) {
         Logger.d("message=" + t.getMessage() + "\n toString=" + t.toString() + "\n" + "code=" + t.hashCode());
         if (t != null && t.getMessage().startsWith("Failed to connect")) { //Unable to resolve host
             Logger.d("请检查网络是否畅通");
         }
     }
 });

简单使用

先看Demo,再解释。
Demo下载地址:RetrofitDemo01

这里写图片描述

Step1:创建接口

接口里面是app的所有的请求方法,@GET @POST代表是哪一种请求方式,@Path+@Query
{占位符}和PATH只用在URL的path部分,url中的参数使用Query和QueryMap 代替,保证接口定义的简洁

public interface AppUrl {
    //无参
    @GET("check2")
    Call<UpdateBean> get1();

    //有参
    @POST("ip2addr")
    Call<IPBean> post1(@Query("ip") String ip, @Query("key") String key);

    @GET("ip2addr")
    Call<String> get3(@Query("ip") String ip, @Query("key") String key);
}

Step2:创建retrofit对象

addConverterFactory表示使用解析工厂

String url = "http://192.168.1.11:8080/QQ/";
//1 创建Retrofit对象
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(url)
        .addConverterFactory(GsonConverterFactory.create())
        .build();

Step3:获取创建的接口

获取我们创建的接口

//2 获取网络接口 AppUrl
AppUrl appUrl = retrofit.create(AppUrl.class);

Step4:调用接口里面的方法,获取Call

//3 调用AppUrl里面的方法获取call
Call<UpdateBean> call = appUrl.get1();

Step5:请求网络

call.enqueue(new Callback<UpdateBean>() {
    @Override
    public void onResponse(Call<UpdateBean> call, Response<UpdateBean> response) {
        //response.body()就是泛型
        UpdateBean bean = response.body();
        Logger.d("id=" + bean.getId());
    }

    @Override
    public void onFailure(Call<UpdateBean> call, Throwable t) {
        Logger.d("message=" + t.getMessage() + "\n toString=" + t.toString());
    }
});

ConverterFactory解析工厂

可以添加多种解析方式,

Retrofit retrofit = new Retrofit.Builder()
               .baseUrl("http://106.3.227.33/pulamsi/")
               //增加返回值为String的支持
               .addConverterFactory(ScalarsConverterFactory.create())
               //增加返回值为Gson的支持(以实体类返回)
               .addConverterFactory(GsonConverterFactory.create())
               //增加返回值为Oservable<T>的支持
               .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
               .build();

请求失败的处理

@Override
public void onFailure(Call<String> call, Throwable t) {
    Logger.d("message=" + t.getMessage() + "\n toString=" + t.toString() + "\n" + "code=" + t.hashCode());
    if (t != null && t.getMessage().startsWith("Failed to connect")) { //Unable to resolve host
        Logger.d("请检查网络是否畅通");
    }
}

网络请求框架(一):android-async-http
网络请求框架(二):xUtils
网络请求框架(三):Volley

Volley的使用(一):get+post
Volley的使用(二):加载网络图片
Volley的使用(三):Volley与Activity的联动 + Volley的二次封装

网络请求框架(四):OkHttp
网络请求框架(五):Retrofit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值