Android开发学习之路--RxAndroid之初体验
学了一段时间android,看了部分的项目代码,然后想想老是学基础也够枯燥乏味的,那么就来学习学习新东西吧,相信很多学java的都听说过RxJava,那么android下也有RxAndroid。
RxJava最核心的两个东西是Observables(被观察者,事件源)和Subscribers(订阅者)。Observables发出一系列事件,Subscribers处理这些事件。这里的事件可以是任何你感兴趣的东西,触摸事件,web接口调用返回的数据等等。
关于RxAndroid的github:https://github.com/ReactiveX/RxAndroid。
新建emRxAndroidStudy工程, 然后在build.grade的dependencies里添加:
- compile 'io.reactivex:rxandroid:1.1.0'
- compile 'io.reactivex:rxjava:1.1.0'
接着我们来试下RxAndroid了, 首先这里我们还是使用上次的注解的方式,把4个和Annotation相关的文件拷贝到工程,编写MainActivity代码如下:
- package com.jared.emrxandroidstudy;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.widget.Button;
- import android.widget.TextView;
- import rx.Observable;
- import rx.Subscriber;
- @EMLayoutBinder(R.layout.activity_main)
- public class MainActivity extends BaseActivity {
- private static final String TAG = "MainActivity";
- private Subscriber<String> subscriber;
- private Observable<String> observable;
- @EMViewBinder(R.id.hello)
- private TextView mHello;
- @EMViewBinder(R.id.test1)
- private Button mTest1;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- createSubscriber();
- }
- private void bindSubscriber() {
- observable.subscribe(subscriber);
- }
- private void createSubscriber() {
- subscriber = new Subscriber<String>() {
- @Override
- public void onCompleted() {
- Log.d(TAG, "onCompleted");
- }
- @Override
- public void onError(Throwable e) {
- e.printStackTrace();
- }
- @Override
- public void onNext(String t) {
- Log.d(TAG, "onNext");
- mHello.setText(t);
- }
- };
- }
- private String getHello() {
- return "Hello RxAndroid";
- }
- private String getHello1() {
- return "Hello RxAndroid 1";
- }
- @EMOnClickBinder({R.id.test1})
- public void myOnClick(View view) {
- switch (view.getId()) {
- case R.id.test1:
- createObservable();
- break;
- default:
- break;
- }
- }
- private void createObservable() {
- Log.d(TAG, "observable");
- observable = Observable.create(new Observable.OnSubscribe<String>() {
- @Override
- public void call(Subscriber<? super String> subscriber) {
- subscriber.onNext(getHello());
- subscriber.onCompleted();
- }
- });
- bindSubscriber();
- }
- }
布局文件如下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- tools:context="com.jared.emrxandroidstudy.MainActivity">
- <TextView
- android:id="@+id/hello"
- android:text="Hello World!"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- <Button
- android:id="@+id/test1"
- android:text="Test"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textAllCaps="false"/>
- </LinearLayout>
这里创建了Observable,用来发送一字符串,然后创建了Subscriber,用来接收事件处理,然后把这两个绑定,按下按钮后,subscriber会调用onNext方法和onCompleted方法。
当然这里的createObservable可以通过just方法简化:
- private void createObservableByJust() {
- Log.d(TAG, "createObservable");
- observable = Observable.just(getHello());
- bindSubscriber();
- }
效果和上述的是一样一样的。接着简化subscriber了:
- private void createSubscriberByAction() {
- onNextAction = new Action1<String>() {
- @Override
- public void call(String s) {
- mHello.setText(s);
- }
- };
- }
这里通过Action1来实现,完全没有了subscriber了的感觉,接着修改绑定如下:
- private void bindSubscriber() {
- //observable.subscribe(subscriber);
- observable.subscribe(onNextAction);
- }
效果还是一样一样的。
好了,接着我们来使用下操作符map,修改如下:
- private void createObservableByMap() {
- Log.d(TAG, "createObservableByMap");
- Observable.just(getHello()).map(new Func1<String, String>() {
- @Override
- public String call(String s) {
- return s + " by eastmoon";
- }
- }).subscribe(onNextAction);
- }
运行结果后原来字符串加上了by eastmoon了。其实map的功能就是在observable和subscribe之间可以对数据进行操作。
Android开发学习之路--RxAndroid之初体验的更多相关文章
- Android开发学习之路--Activity之初体验
环境也搭建好了,android系统也基本了解了,那么接下来就可以开始学习android开发了,相信这么学下去肯定可以把android开发学习好的,再加上时而再温故下linux下的知识,看看androi ...
- Android开发学习之路--React-Native之初体验
近段时间业余在学node.js,租了个阿里云准备搭建后端,想用node.js,偶尔得知react-native可以在不同平台跑,js在iOS和android上都可以运行ok,今天就简单学习下rea ...
- Android开发学习之路--Service之初体验
android最后一个组件便是service了,终于学习到最后一个组件了,从年前的开发环境的搭建,到现在学到最后一个组件花了三周的时间,期间记录的点点滴滴,照着书本学习编写的代码都受益匪浅,这里要感谢 ...
- Android开发学习之路--传感器之初体验
说到传感器,还是有很多的,有加速度啊,光照啊,磁传感器等等.当然android手机之所以称为智能手机,少不了这几款传感器的功劳了.下面就学习下了,这里主要学习光照,加速度和磁. 新建工程emSenso ...
- Android开发学习之路--Camera之初体验
顾名思义Camera就是拍照和录像的功能,像微信里面,我们想拍照传一下照片,就可以通过camera来拍照,然后存储照片,发送给好友.那么微信的app里面是不会直接通过camera api来实现的,因为 ...
- Android开发学习之路--UI之初体验
之前都是学习Activity,对于布局都没有做过学习,这里就简单学习下吧.下面看下Android Studio下有哪些控件: 这里分为Widgets,Text Fields,Containers,Da ...
- Android开发学习之路--Notification之初体验
一般当我们收到短信啊,微信啊,或者有些app的提醒,我们都会在通知栏收到一天简单的消息,然后点击消息进入到app里面,其实android中有专门的Notification的类可以完成这个工作,这里就实 ...
- Android开发学习之路--RxAndroid之简单原理
学习了RxAndroid,其实也就是RxJava了,但是还是不是非常清楚到底RxAndroid有什么用呢?为什么要使用RxAndroid呢?这篇文章讲得不错,RxJava的原理.但是这里还是把整个 ...
- Android开发学习之路--RxAndroid之lambda
RxJava的简单使用基本上也了解了,其实还有一个比较好玩的就是java8才有的lambda了. lambda在android studio下的环境搭建 下载java8 下面就来搭建下这个环境 ...
随机推荐
- hdu 5641 BestCoder Round #75
King's Phone Accepts: 310 Submissions: 2980 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- [BZOJ]4650 优秀的拆分(Noi2016)
比较有意思的一道后缀数组题.(小C最近是和后缀数组淦上了?) 放在NOI的考场上.O(n^3)暴力80分,O(n^2)暴力95分…… 即使想把它作为一道签到题也不要这么随便啊摔(╯‵□′)╯︵┻━┻ ...
- Thread类中的静态方法
1.currentThread() currentThread()方法返回的是对当前正在执行线程对象的引用. package thread; /** * 线程类的构造方法.静态块是被main线程调用的 ...
- Python开发——利用正则表达式实现计算器算法
Python开发--利用正则表达式实现计算器算法 (1)不使用eval()等系统自带的计算方法 (2)实现四则混合运算.括号优先级解析 思路: 1.字符串预处理,将所有空格去除 2.判断是否存在括号运 ...
- linux 删除命令
rm * 文件名rm -r */ 文件夹rm -rf * 文件夹或文件名 -r 代表文件夹之下的都删除掉 -f 代表暴力删除,无需确认直接删完
- bootstrap插件fileinput.js 出现出现$("#xxxx").fileinput({}); 不生效的情况解决
如果出现$("#xxxx").fileinput({}); 不生效的情况请将fileinput.js中最后几行注释掉: /* $(document).ready(function ...
- brew的MAC安装
1.介绍 brew是一个软件包管理工具,类似于centos下的yum或者ubuntu下的apt-get,非常方便,免去了自己手动编译安装的不便 brew 安装目录 /usr/local/Cellar ...
- find函数用法详解
语法:find (string, sub3tring<, modifiers, startpos>),返回substring首次在string中出现的位置,若未找到,则返回0.其中:mod ...
- PTA中如何出Java题目?
PTA中如何出Java题目? 很多第一次出题的老师,不知道Java在PTA中是如何处理输入的.写一篇文章供大家参考.比如以下这样的一个题目: 从控制台读入两个数,然后将其相加输出. 对于该题可以有如下 ...
- 高仿腾讯QQ最终版
之前写过一篇关于高仿腾讯QQ的博客,不知道的看这:http://blog.csdn.net/htq__/article/details/51840273 ,主要是从界面上高仿了腾讯QQ,在UI上基本上 ...