啓動頁面開發
一.引言
樂呵項目是個人前段時間練習retrofit+rajava+Dragger2+MVP而做的一個小DEMO,前期功能只是實現了從百度API請求數據,以及圖片的處理,這段時間工作不忙了,打算把項目完整做下去。
二.項目需求
樂呵(初步)目的是休閒娛樂功能,包括以下模塊:
1.啓動頁(一句名言)
2.腦筋急轉彎
3.笑話
4.圖片
5.個人設置
三.項目進度
模塊1,2,4初步完成功能,後期慢慢優化。
四.昨日總結
以後的日誌主要是這部分,就當是對每天工作的總結。
昨天完成了啓動頁功能,在項目啓動之前出一個啓動頁,頁面啓動是同時請求網絡,獲取一句名言,顯示在頁面上。很簡單的功能,但是還是遇到了兩坑:
1.ButterKnife與Dragger2衝突,Activity中的ButterKuife實例化的View怎麼都是空,Baidu了下,有人提出瞭解決方法,但是不好用,從當前項目使用情況考慮,Dragger2定的框架,ButterKnife用的較少,從工作量考慮把ButterKnife給刪掉了,後續找到兼容方法再說。(已經找到了解決方法,原來是dragger2的版本問題,換成下面的就可以了)
compile ‘com.jakewharton:butterknife:8.4.0’
apt ‘com.jakewharton:butterknife-compiler:8.4.0’
compile ‘com.google.dagger:dagger:2.5’
provided ‘com.google.dagger:dagger-compiler:2.5’
2.retrofit+rajava的取消請求問題。在啓動頁需要考慮的一種情況是網絡問題沒有及時獲取到數據,頁面一樣要跳轉的主頁,所以需要在跳轉時候取消網絡請求。單獨一個retrofit很好辦,但是加了Dragger 和rxjava封裝之後,就悲劇啦,需要對封裝進行修改,目前修改方式有兩種
(1).針對這個請求將APIService返回的Observable 改成Call ,通過call.cancle();取消請求。
//將返回的 Observable<Lines> 改成 Call<Lines>
@GET("acman/zhaiyanapi/tcrand")
Observable<Lines> getLines(@Header("apikey") String apikey, @Query("fangfa") String fangfa);
@GET("acman/zhaiyanapi/tcrand")
Call<Lines> getWords(@Header("apikey") String apikey, @Query("fangfa") String fangfa);
//請求過程實現類修改成
public Subscription getLines(SimpleCallback<Lines> callback){
return apiService.getLines(Constant.APIKEY,"json").subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new ExceptionSubscriber<Lines>(callback,application));
}
/**
/*返回Call<Lines>
*/
public Call<Lines> getWords(final SimpleCallback<Lines> callback){
Call<Lines> call = apiService.getWords(Constant.APIKEY,"json");
call.enqueue(new Callback<Lines>() {
@Override
public void onResponse(Call<Lines> call, Response<Lines> response) {
Log.e("result",response.body().getTaici());
callback.onNext(response.body());
}
@Override
public void onFailure(Call<Lines> call, Throwable t) {
}
});
return call;
}
(2).看上面代碼段也看到了,就是Subscription 返回,再通過 subscription.unsubscribe();來取消訂閱。
//取消網絡請求
mTimer.schedule(new TimerTask() {
@Override
public void run() {
subscription.unsubscribe();
// call.cancel();
goToMainView();
}
},3000);
五.今日計劃
完成笑話功能。