android--------Retrofit+RxJava的使用

Retrofit是Square公司開發的一款針對Android網絡請求的一個當前很流行的網絡請求庫。php

http://square.github.io/retrofit/
https://github.com/square/retrofit
java

使用需引入:react

 

compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'io.reactivex:rxandroid:1.0.1'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'

 

Retrofit包含了多種網絡請求方式,可根據參考選擇。
全路徑android

@GET(URL+"?platform=android&appkey=5a379b5eed8aaae531df5f60b12100cfb6dff2c1&c=member&a=getdepartments")  
Call<解析實體類> getInfo1();  

 

@Query("key") String key用於接口鍵值對類型參數git

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

@QueryMap  若是Query參數比較多,那麼能夠經過@QueryMap方式將全部的參數集成在一個Map統一傳遞github

@GET("app.php")
Call<UserInfo> getInfoMap(@QueryMap Map<String,String> map);

注意:以上GET換成POST也是同樣的效果api

@Field("key") String key用於接口鍵值對類型參數網絡

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

@FieldMap  若是Field參數比較多,那麼能夠經過@FieldMap方式將全部的參數集成在一個Map統一傳遞app

@FormUrlEncoded @POST("app.php") Call<UserInfo> postInfoMap(@FieldMap Map<String,String> map);

對於 Retrofit 中新的URL定義方式也是有必定要求的,版本不一樣有時格式也不同,如今大多數2.0以上,@GET/POST()建議格式不要以 /開頭,如:ide

 

@POST("/app.php")

而是:URL以 / 結尾  如:(注:全路徑則不影響)

 http://www.baidu.com/

 

代碼:

定義接口 IRequestService .java

 

@GET(URL+"app.php?platform=android&appkey=5a379b5eed8aaae531df5f60b12100cfb6dff2c1&c=member&a=getdepartments")  
Call<UserInfo> getInfo1();  
  
/*@Query("apikey") String apikey 用於接口鍵值對類型參數*/  
@GET("app.php")  
Call<UserInfo> getInfo2(@Query("platform") String platform, @Query("appkey") String appkey, @Query("c") String ip, @Query("a") String tag);  
  
/*@QueryMap  若是Query參數比較多,那麼能夠經過@QueryMap方式將全部的參數集成在一個Map統一傳遞*/  
@GET("app.php")  
Call<UserInfo> getInfoMap(@QueryMap Map<String,String> map);  

 

使用

Retrofit retrofit = new Retrofit.Builder() .baseUrl(urls) .addConverterFactory(GsonConverterFactory.create()) .build();
IRequestService service = retrofit.create(IRequestService.class);
Call<DepartmentInfo> call=service.getInfo1();
call.enqueue(new Callback<DepartmentInfo>() { @Override
    public void onResponse(Call<DepartmentInfo> call, Response<DepartmentInfo> response) { DepartmentInfo info=response.body();
        mTextView.setText(info.getError()+"-----"+info.getData().get(0).toString());
        Toast.makeText(getApplicationContext(),info.getError(),Toast.LENGTH_LONG).show();
        Log.i("tag", info.getData().get(0).getDepartname());
        Log.i("tag", info.getData().get(1).getDepartname());
    } @Override
    public void onFailure(Call<DepartmentInfo> call, Throwable t) { } });

Retrofit + RxJava結合使用

和上面差很少, 只不過再也不是Call對象而是Observable對象,及RxJava中的事件源。

@GET(URL+"app.php?platform=android&appkey=5a379b5eed8aaae531df5f60b12100cfb6dff2c1&c=member&a=getdepartments")
Observable<UserInfo> getRxjava();

@POST("app.php")
Observable<UserInfo> getUserFollowingObservable(@QueryMap Map<String,String> map);

使用

RxJavaCallAdapterFactory rxAdapter = RxJavaCallAdapterFactory.createWithScheduler(Schedulers.io());
Retrofit retrofit11 = new Retrofit.Builder() 
  .baseUrl(urls) 
  .addConverterFactory(GsonConverterFactory.create())
  .addCallAdapterFactory(rxAdapter) 
  .build();
IRxJavaService apiService = retrofit11.create(IRxJavaService.class);
Observable<DepartmentInfo> call = apiService.getUser(Util.showMap());
subscription = call
      .subscribeOn(Schedulers.io())
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Subscriber<DepartmentInfo>() { 
            @Override
            public void onCompleted() { }
            @Override
            public void onError(Throwable e) { } 
            @Override
            public void onNext(DepartmentInfo user) { Toast.makeText(getApplicationContext(),
                        user.getData().get(0).getDepartname(),
                        Toast.LENGTH_SHORT) .show();
            } });

總結:

Retrofit的使用和理解簡單的梳理了一遍,但願可以幫助你們更好地理解Retrofit的使用。

 

源碼點擊下載:https://github.com/DickyQie/android-api-request

相關文章
相關標籤/搜索