乐呵开发日志

启动页面开发

一.引言
乐呵项目是个人前段时间练习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);

五.今日计划

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