樂呵開發日誌

啓動頁面開發

一.引言
樂呵項目是個人前段時間練習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);

五.今日計劃

        完成笑話功能。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章