Retrofit2 學習總結 (二)Rxjava +Retrofit +java web伺服器簡單小例子
通過一段時間的學習,Rxjava Retrofit2終於算是入了門,學習的過程中寫了個簡單的小例子,像我這樣的人學習東西還是喜歡有一個正確的例子用來學習的。
本demo已經上傳到了gitHup:
java伺服器 :https://github.com/tanglonghui/Retrofit2Server
安卓客戶端:https://github.com/tanglonghui/Retrofit2Study
千山萬水總是情,給個star行不行
寫篇部落格總還是要有點東西的,就貼兩個程式碼地址有點虛,順便再鞏固一下自己所學。
總的來說,這是一篇面向菜鳥的文章,只有菜鳥才知道菜鳥需要什麼。
一、環境搭建
安卓:既然要用Rxjava Retrofit2 幾個包還是要有的
//retrofit2依賴 compile 'com.squareup.retrofit2:retrofit:2.0.2' compile 'com.squareup.retrofit2:converter-gson:2.0.2' //rxjava2依賴 compile 'io.reactivex.rxjava2:rxjava:2.1.1' compile 'io.reactivex.rxjava2:rxandroid:2.0.1' //聽說可以用來解決適配性問題 compile'com.squareup.retrofit2:adapter-rxjava2:2.2.0'
伺服器:
用了三個jar包,前兩個是解決檔案上傳的,後一個大家都知道。
想學麼?想學的話就去百度吧,我也不會。
二、Retrofit2 網路請求
打字好累啊,沒有耐心與實力的人真可怕。
來大家跟我一起做。
1.搞一個網路請求介面 interface
public interface GetUserService { //0.簡單的get請求 通過get請求一個User 模仿token驗證 @GET("UserServelt") Call<User> getUser(@Header("token") String token); }
@get :表示get請求
“Userservelt” :與下文的baseUrl組成一個完整的Url。
Call<User> : Retrofit2標準配置 <>中放你想要的資料格式。
@Header(“token”) :請求頭中帶一個token
2.搞一個Api
public class Api {
private static String baseUrl="http://192.168.1.101:8080/Retrofit2Server/";
/*
* 同一獲得網路請求的介面
* baserUrl 需按實際情況更改
*/
public static GetUserService getUserService(){
Retrofit retrofit=new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
GetUserService getUserService=retrofit.create(GetUserService.class);
return getUserService;
}
}
這個是不是叫封裝0。0,反正都是這麼做的
3.發起網路請求
case R.id.button:
Api.getUserService().getUser("1433227").enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
Toast.makeText(MainActivity.this, "結果" + response.body(), Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(Call<User> call, Throwable t) {
Toast.makeText(MainActivity.this, "結果失敗", Toast.LENGTH_SHORT).show();
}
});
break;
這個是非同步請求。
三、Rxjava+Retrofit2網路請求
同樣
1.搞一個介面 interface
public interface RxjavaGetService {
/*
* rxjava 用來替換Call的有兩個 Flowable 支援背壓 Observable 不支援背壓 但正常情況下 開銷低一些
* 根據 選擇 使用 .subscribe(new Subscriber<User>(){}) 或 .subscribe(new Observer<User>(){}}
*/
//0.簡單的get請求 通過get請求一個User 模仿token驗證
@GET("UserServelt")
Flowable<User> getUser(@Header("token") String token);//Flowable支援背壓
}
也沒變多少,就call<User> 換成 Rxjava 給你提空的東東
2.搞一個api
public class Api {
private static String baseUrl="http://192.168.1.101:8080/Retrofit2Server/";
/*
* 同一獲得網路請求的介面
* baserUrl 需按實際情況更改
*/
public static GetUserService getUserService(){
Retrofit retrofit=new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
GetUserService getUserService=retrofit.create(GetUserService.class);
return getUserService;
}
public static RxjavaGetService RxjavaGetService (){
Retrofit retrofit=new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())//Rxjava適配
.build();
RxjavaGetService rxjavaGetService=retrofit.create(RxjavaGetService.class);
return rxjavaGetService;
}
}
你可以觀察一下,其實也沒多大差別,就是多了一層Rxjava適配
3.網路請求
case R.id.button:
//正確返回依次走 124 錯誤直接進3
Api.RxjavaGetService().getUser("1433223")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<User>() {
@Override
public void onSubscribe(Subscription s) {
/*
吃了英語的虧,大概,感覺是推薦我們用這個值吧
大概是設定背壓什麼的
*/
s.request(Long.MAX_VALUE);
Toast.makeText(Main2Activity.this, "1", Toast.LENGTH_SHORT).show();
}
@Override
public void onNext(User user) {
//在這裡進行返回訊息出來
Toast.makeText(Main2Activity.this, "2", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Throwable t) {
//錯誤走這裡
Toast.makeText(Main2Activity.this, "3", Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete() {
Toast.makeText(Main2Activity.this, "4", Toast.LENGTH_SHORT).show();
}
});
break;
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
百度應該知道上面那兩個東西是幹什麼的
一個io的計劃,一個主執行緒執行啥的。。。。。
寫點什麼就覺得很累,才能不足吧,畢竟自己也才是瞭解介個是什麼,那個是什麼,真要解釋是什麼,腦子裡也沒有多少貨,
CV程式設計師,
努力不一定成功,但放棄絕對很輕鬆。
哈哈~~~~