retrofit+RXjava二次封装

接入说明:项目中已集成RXjava,RXandroid。Retrofit,为避免包冲突,不须要再次接入。

就可以直接使用RXjava,Retrofit的所有api.

github地址:https://github.com/hunanqi/Retrofit_Two

第一步:在项目的gradle文件里:

allprojects { repositories { ... maven { url \'https://jitpack.io\' } } }第二步:在app的gradle文件里。 dependencies { compile \'com.github.hunanqi:Retrofit_Two:1.0.0\' }

第三步使用:

Flowable<T> flowable1 = RetrofitUtils.getFlowable("http://apis.juhe.cn/", "mobile/get", user, tClass); Flowable<T> tFlowable = flowable1.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(); 參数说明:第一个是基本地址,第二个是server地址,此处完整的地址是:

第三个是请求实体类。属性必须全为public,第四个是server返回的json数据相应的实体类。

也可像以下样例中的使用方式,建立一个NetWork网络请求管理类方便管理。

1.測试接口的说明

  请求地址:?

phone=13429667914&key=您申请的KEY

  返回数据演示样例:

{ "resultcode":"200", "reason":"Return Successd!", "result":{ "province":"浙江", "city":"杭州", "areacode":"0571", "zip":"310000", "company":"中国移动", "card":"移动动感地带卡" } }2.封装过后的使用(UserEntity表示请求实体类,此处有2个參数,DataEntity:返回数据的实体类,如上json 数据创建的实体类)
//网络測试 private void http() { UserEntity user = new UserEntity(); user.phone = "13438284220"; user.key = "6fe9a2f9cc05e6941bcc45e30a32e51a"; NetWork.query(user,DataEntity.class).subscribe(new Consumer<DataEntity>() { @Override public void accept(DataEntity dataEntity) throws Exception { Toast.makeText(MainActivity.this, dataEntity.getResult().getCity(), Toast.LENGTH_SHORT).show(); } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { Log.i("sss",throwable.toString()); Toast.makeText(MainActivity.this, "网络连接失败", Toast.LENGTH_SHORT).show(); } }); }

说明:第一个内部类是为了处理数据,第二个是处理网络异常的信息。參数方面第一个參数是请求实体类。第二个是server返回的json数据的实体类

注意事项:请求实体类中的属性由于反射的原因,必须所有写成public。

(1).创建网络请求管理类3.封装思路(由外向内)

/** * Created by 胡楠启 on 2017/2/24. * Function: * Desc: 网络请求管理类 */ public class NetWork { //查询手机号码的归属地 public static <T> Flowable<T> query(UserEntity user,Class<T> tClass) { Flowable<T> flowable1 = RetrofitUtils.getFlowable("http://apis.juhe.cn/", "mobile/get", user, tClass); Flowable<T> tFlowable = flowable1.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()); return tFlowable; } }

说明:此处依据server接口个数,把所有的接口详细细节创建在这里,方便调用管理。此处详细的作用,确定接口的URL。确定代码执行线程。以及接口回调后的执行线程,

 

        每个server接口都须要写一个相应的參数并配置參数。

 切割线------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

(2)初始化retrofit   

/** * Created by 胡楠启 on 2017/2/24. * Function: * Desc: */ public class RetrofitUtils { public static<T> Flowable<T> getFlowable(String baseurl, String url, Object bin, final Class<T> tClass){ //得到包括參数的map集合 HashMap<String, String> maps = MapUtils.getValuesHash(bin.getClass(), bin); //retrofit初始化 retrofit2.Retrofit retrofit = new retrofit2.Retrofit.Builder() .baseUrl(baseurl) .client(getOkHttp())//添加OKhttp设置生效 //添加返回值为String的支持 .addConverterFactory(ScalarsConverterFactory.create()) //添加返回值为Gson的支持(以实体类返回) .addConverterFactory(GsonConverterFactory.create()) //支持RXjava .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); RetrofitInterface retrofitInterface = retrofit.create(RetrofitInterface.class); Flowable<String> flowable = retrofitInterface.getData(url, maps); Flowable<T> map = flowable.map(new Function<String, T>() { @Override public T apply(String s) throws Exception { Gson gson = new Gson(); T t = gson.fromJson(s, tClass); return t; } }); return map; } /** * 设置OKhttp的參数,打印网络请求详情 */ private static OkHttpClient getOkHttp(){ HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() { @Override public void log(String message) { //打印retrofit日志 Log.i("RetrofitLog","retrofitBack = "+message); } }); loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient client=new OkHttpClient.Builder().addInterceptor(loggingInterceptor).build(); return client; } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzpjgs.html