启动页面开发
一.引言
乐呵项目是个人前段时间练习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);
五.今日计划
完成笑话功能。