自定义控件
- 一分钟实现贴纸功能
- 一分钟实现TextView高亮
- 一分钟实现新手引导页
- 一分钟实现ViewPager卡片
- 一分钟实现加载对话框
- 一分钟实现轮播图
- 一分钟实现GridView拖拽
- 一分钟实现底部导航栏
- 一分钟实现底部FragmentTabhost
- 一分钟实现多张图片选择
- 一分钟实现仿美拍直播的点赞动画
- 一分钟实现高仿今日头条视频列表
- 一分钟实现购物车加减控件
- 一分钟实现省市县三级联动
- 一分钟实现二维码生成和扫描
- 一分钟实现沉浸式状态栏
- 一分钟实现图片裁剪
- 一分钟实现视频弹幕
- 一分钟实现图片缩放
- 一分钟实现旋转选择器
- 一分钟实现ofo小黄车的引导界面
- 一分钟实现自定义ImageView外貌
- 一分钟实现向左拖拽跳转详情页
- 一分钟实现QQ首页动画特效
- 一分钟实现ViewPager上下滑动
联网
工具
数据库
源码分析相关面试题
Activity相关面试题
- 保存Activity的状态
- 深刻剖析activity启动模式(一)
- 深刻剖析activity启动模式(二)
- 深刻剖析activity启动模式(三)
- Activity Task和Process之间的关系
- 源码分析service开启Activity抛异常?activity不会抛异常
- Activity优雅退出
- onCreate源码分析
Service相关面试题
与XMPP相关面试题
与性能优化相关面试题
与登录相关面试题
与开发相关面试题
- 迭代开发的时候如何向前兼容新旧接口
- 手把手教你如何解决as jar包冲突
- context的原理分析
- 解决ViewPager.setCurrentItem中间很多页面切换方案
- 字体适配
- 软键盘适配
- 机型适配,例如三星、小米、华为、魅族等
- CardView 设置水波纹效果
与人事相关面试题
Rxjava快速封装实现的示例工程,包括变换的使用以及与Retrofit联用
开源项目地址:https://github.com/open-android/RxjavaUtils
-
开始在build.gradle添加依赖
compile 'io.reactivex:rxjava:1.0.9' compile 'io.reactivex:rxandroid:0.24.0' compile 'com.squareup.retrofit:retrofit:1.9.0'
-
需要的权限
<uses-permission android:name="android.permission.INTERNET" />
- 使用RxjavaUtil请求数据时需要和Retrofit连用,第一步就是使用Retrofit定义所有功能接口的API服务类,以天气接口为例。,
-
参数声明,Url都通过Annotation指定,接口定义如下:
private interface AppApi { @GET("/weather") WeatherData getWeather(@Query("q") String city, @Query("mode") String mode, @Query("APPID") String APPID); }
-
返回数据如下,可以使用GsonFormat自动生成javabean(即WeatherData):
{"coord":{"lon":114.07,"lat":22.55},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"base":"stations","main":{"temp":293.15,"pressure":1018,"humidity":72,"temp_min":293.15,"temp_max":293.15},"visibility":10000,"wind":{"speed":3.69,"deg":116.004},"clouds":{"all":0},"dt":1483538400,"sys":{"type":1,"id":7420,"message":0.0134,"country":"CN","sunrise":1483484686,"sunset":1483523588},"id":1795565,"name":"Shenzhen","cod":200}
- 第二步是通过RestAdapter生成API接口服务的实现类(动态代理)
private static final RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(ENDPOINT).setLogLevel(RestAdapter.LogLevel.FULL).build();
private static final AppApi appService = restAdapter.create(AppApi.class);
- 第三步是关键的一步,将返回的数据类型包装到一个数据源(Observable)中。
onNext是RxJava发送事件,即开始请求数据,onCompleted为结束任务的事件,subscribeOn为指定获取数据的线程为耗时线程。
public static Observable<WeatherData> getWeatherData(final String city) {
return Observable.create(new Observable.OnSubscribe<WeatherData>() {
@Override
public void call(Subscriber<? super WeatherData> subscriber) {
subscriber.onNext(appService.getWeather(city,"json", "6c113432fd84a6e28268af291821db16"));
subscriber.onCompleted();
}
}).subscribeOn(Schedulers.io());
}
-
最后调用封装好的方法就可以了,拿到数据后,在主线程中回调(subscribeOn(Schedulers.io()),获取单个天气示例如下:
RxJavaUtil.getWeatherData(cityName).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<WeatherData>() { @Override public void call(WeatherData weatherData) { Log.d(LOG_TAG, weatherData.toString()); switch (cityName){ case "beijing": mTv1.setText(weatherData.toString()); break; case "shenzhen": mTv2.setText(weatherData.toString()); break; case "shanghai": mTv3.setText(weatherData.toString()); break; } } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { Log.e(LOG_TAG, throwable.getMessage(), throwable); } });
-
当获取多个天气时候,要使用到Rxjava的变换,简单点理解,就是一个数据源变成多个数据源,一对多的映射关系。
Observable.from(cities).flatMap(new Func1<String, Observable<WeatherData>>() { @Override public Observable<WeatherData> call(String city) { return RxJavaUtil.getWeatherData(city); } }).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(/*onNext*/new Action1<WeatherData>() { @Override public void call(WeatherData weatherData) { String cityName = weatherData.name.toLowerCase(); switch (cityName){ case "beijing": mTv1.setText(weatherData.toString()); break; case "shenzhen": mTv2.setText(weatherData.toString()); break; case "shanghai": mTv3.setText(weatherData.toString()); break; } } }, /*onError*/new Action1<Throwable>() { @Override public void call(Throwable throwable) { } });}
欢迎关注微信公众号
微信公众号名称:Android干货程序员
网友评论