Android开发之Retrofit+RxJava的使用

Retrofit是Square公司开发的一款针对Android网络请求的一个当前很流行的网络请求库。

官网:http://square.github.io/retrofit/
github:https://github.com/square/retrofit

使用需引入:

Java代码
  1. compile 'com.squareup.retrofit2:retrofit:2.1.0'  
  2. compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'  
  3. compile 'io.reactivex:rxandroid:1.0.1'  
  4. compile 'com.squareup.retrofit2:converter-gson:2.1.0'  

Retrofit包含了多种网络请求方式,可根据参考选择。
全路径

Java代码
  1. @GET(URL+"?platform=android&appkey=5a379b5eed8aaae531df5f60b12100cfb6dff2c1&c=member&a=getdepartments")  
  2. Call<解析实体类> getInfo1();  


@Query("key") String key用于接口键值对类型参数

Java代码
  1. @GET("app.php")  
  2. Call<UserInfo> getInfo2(@Query("platform") String platform, @Query("appkey") String appkey, @Query("c") String ip);  

 

@QueryMap 如果Query参数比较多,那么可以通过@QueryMap方式将所有的参数集成在一个Map统一传递

扫描二维码关注公众号,回复: 228855 查看本文章
Java代码
  1. @GET("app.php")  
  2. Call<UserInfo> getInfoMap(@QueryMap Map<String,String> map);  

注意:以上GET换成POST也是一样的效果

@Field("key") String key用于接口键值对类型参数

Java代码
  1. @FormUrlEncoded  
  2. @POST("app.php")  
  3. Call<UserInfo> postField(@Field("platform") String bookId, @Field("appkey") String title,@Field("c") String content);  


@FieldMap 如果Field参数比较多,那么可以通过@FieldMap方式将所有的参数集成在一个Map统一传递

Java代码
  1. @FormUrlEncoded  
  2. @POST("app.php")  
  3. Call<UserInfo> postInfoMap(@FieldMap Map<String,String> map);  


对于 Retrofit 中新的URL定义方式也是有一定要求的,版本不同有时格式也不一样,现在大多数2.0以上,@GET/POST()建议格式不要以 /开头,如:

Java代码
  1. @POST("/app.php")  

 

而是:URL以 / 结尾 如:(注:全路径则不影响)

Html代码
  1. http://www.baidu.com/  

 

代码:

定义接口 IRequestService .java

Java代码
  1. @GET(URL+"app.php?platform=android&appkey=5a379b5eed8aaae531df5f60b12100cfb6dff2c1&c=member&a=getdepartments")  
  2. Call<UserInfo> getInfo1();  
  3.   
  4. /*@Query("apikey") String apikey 用于接口键值对类型参数*/  
  5. @GET("app.php")  
  6. Call<UserInfo> getInfo2(@Query("platform") String platform, @Query("appkey") String appkey, @Query("c") String ip, @Query("a") String tag);  
  7.   
  8. /*@QueryMap  如果Query参数比较多,那么可以通过@QueryMap方式将所有的参数集成在一个Map统一传递*/  
  9. @GET("app.php")  
  10. Call<UserInfo> getInfoMap(@QueryMap Map<String,String> map);  


使用

Java代码
  1. Retrofit retrofit = new Retrofit.Builder()  
  2.         .baseUrl(urls)  
  3.         .addConverterFactory(GsonConverterFactory.create())  
  4.         .build();  
  5. IRequestService service = retrofit.create(IRequestService.class);  
  6. Call<DepartmentInfo> call=service.getInfo1();  
  7. call.enqueue(new Callback<DepartmentInfo>() {  
  8.     @Override  
  9.     public void onResponse(Call<DepartmentInfo> call, Response<DepartmentInfo> response) {  
  10.         DepartmentInfo  info=response.body();  
  11.         mTextView.setText(info.getError()+"-----"+info.getData().get(0).toString());  
  12.         Toast.makeText(getApplicationContext(),info.getError(),Toast.LENGTH_LONG).show();  
  13.         Log.i("tag", info.getData().get(0).getDepartname());  
  14.         Log.i("tag", info.getData().get(1).getDepartname());  
  15.     }  
  16.   
  17.     @Override  
  18.     public void onFailure(Call<DepartmentInfo> call, Throwable t) {  
  19.   
  20.     }  
  21. });  

Retrofit + RxJava结合使用

和上面差不多, 只不过不再是Call对象而是Observable对象,及RxJava中的事件源。

Java代码
  1. @GET(URL+"app.php?platform=android&appkey=5a379b5eed8aaae531df5f60b12100cfb6dff2c1&c=member&a=getdepartments")  
  2. Observable<UserInfo> getRxjava();  
  3.   
  4. @POST("app.php")  
  5. Observable<UserInfo> getUserFollowingObservable(@QueryMap Map<String,String> map);  

使用

Java代码
  1. RxJavaCallAdapterFactory rxAdapter = RxJavaCallAdapterFactory.createWithScheduler(Schedulers.io());  
  2. Retrofit retrofit11 = new Retrofit.Builder()  
  3.         .baseUrl(urls)  
  4.         .addConverterFactory(GsonConverterFactory.create())  
  5.         .addCallAdapterFactory(rxAdapter)  
  6.         .build();  
  7. IRxJavaService apiService =  retrofit11.create(IRxJavaService.class);  
  8. Observable<DepartmentInfo> call = apiService.getUser(Util.showMap());  
  9. subscription = call  
  10.         .subscribeOn(Schedulers.io())  
  11.         .observeOn(AndroidSchedulers.mainThread())  
  12.         .subscribe(new Subscriber<DepartmentInfo>() {  
  13.             @Override  
  14.             public void onCompleted() {  
  15.             }  
  16.             @Override  
  17.             public void onError(Throwable e) {  
  18.   
  19.             }  
  20.             @Override  
  21.             public void onNext(DepartmentInfo user) {  
  22.                 Toast.makeText(getApplicationContext(),  
  23.                         user.getData().get(0).getDepartname(),  
  24.                         Toast.LENGTH_SHORT)  
  25.                         .show();  
  26.             }  
  27.         });  

总结:

Retrofit的使用和理解简单的梳理了一遍,希望能够帮助大家更好地理解Retrofit的使用。

源码点击下载

猜你喜欢

转载自zhangqie.iteye.com/blog/2366088