Android开发学习之路--RxAndroid之初体验
2016-06-17 13:56
399 查看
学了一段时间Android,看了部分的项目代码,然后想想老是学基础也够枯燥乏味的,那么就来学习学习新东西吧,相信很多学Java的都听说过RxJava,那么android下也有RxAndroid。
RxJava最核心的两个东西是Observables(被观察者,事件源)和Subscribers(订阅者)。Observables发出一系列事件,Subscribers处理这些事件。这里的事件可以是任何你感兴趣的东西,触摸事件,web接口调用返回的数据等等。
关于RxAndroid的github:https://github.com/ReactiveX/RxAndroid。
新建emRxAndroidStudy工程, 然后在build.grade的dependencies里添加:
[java] view
plain copy
compile 'io.reactivex:rxandroid:1.1.0'
compile 'io.reactivex:rxjava:1.1.0'
接着我们来试下RxAndroid了, 首先这里我们还是使用上次的注解的方式,把4个和Annotation相关的文件拷贝到工程,编写MainActivity代码如下:
[java] view
plain copy
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();
}
}
布局文件如下:
[html] view
plain copy
<?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方法简化:
[java] view
plain copy
private void createObservableByJust() {
Log.d(TAG, "createObservable");
observable = Observable.just(getHello());
bindSubscriber();
}
效果和上述的是一样一样的。接着简化subscriber了:
[java] view
plain copy
private void createSubscriberByAction() {
onNextAction = new Action1<String>() {
@Override
public void call(String s) {
mHello.setText(s);
}
};
}
这里通过Action1来实现,完全没有了subscriber了的感觉,接着修改绑定如下:
[java] view
plain copy
private void bindSubscriber() {
//observable.subscribe(subscriber);
observable.subscribe(onNextAction);
}
效果还是一样一样的。
好了,接着我们来使用下操作符map,修改如下:
[java] view
plain copy
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之间可以对数据进行操作。
RxJava最核心的两个东西是Observables(被观察者,事件源)和Subscribers(订阅者)。Observables发出一系列事件,Subscribers处理这些事件。这里的事件可以是任何你感兴趣的东西,触摸事件,web接口调用返回的数据等等。
关于RxAndroid的github:https://github.com/ReactiveX/RxAndroid。
新建emRxAndroidStudy工程, 然后在build.grade的dependencies里添加:
[java] view
plain copy
compile 'io.reactivex:rxandroid:1.1.0'
compile 'io.reactivex:rxjava:1.1.0'
接着我们来试下RxAndroid了, 首先这里我们还是使用上次的注解的方式,把4个和Annotation相关的文件拷贝到工程,编写MainActivity代码如下:
[java] view
plain copy
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();
}
}
布局文件如下:
[html] view
plain copy
<?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方法简化:
[java] view
plain copy
private void createObservableByJust() {
Log.d(TAG, "createObservable");
observable = Observable.just(getHello());
bindSubscriber();
}
效果和上述的是一样一样的。接着简化subscriber了:
[java] view
plain copy
private void createSubscriberByAction() {
onNextAction = new Action1<String>() {
@Override
public void call(String s) {
mHello.setText(s);
}
};
}
这里通过Action1来实现,完全没有了subscriber了的感觉,接着修改绑定如下:
[java] view
plain copy
private void bindSubscriber() {
//observable.subscribe(subscriber);
observable.subscribe(onNextAction);
}
效果还是一样一样的。
好了,接着我们来使用下操作符map,修改如下:
[java] view
plain copy
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-LinearGradient实现TextView字体渐变的效果
- Android三种实现自定义ProgressBar的方式介绍
- android listview系列之初步接触listview(一)
- Android传感器(一):传感器列表
- 搭建android框架管理activity类
- Android开发环境配置
- IntentService分析
- android xml中的代码提示不全
- Android自绘动画实现与优化实战——以Tencent OS录音机波形动画为实例
- Android中Selsetor基本使用二,选中时改变按钮背景
- 我的Android进阶之旅------>Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题
- Android Studio修改包名
- Android中Selsetor基本使用一,按下时改变按钮背景
- 3D效果的ViewPager
- 【Android】ListView中EditText焦点问题
- Android 沉浸式状态栏的三种实现方式
- Android 内部存储和Cache简单介绍
- Android高级_第三方框架Xutils
- 研究一个Android list视图下拉动效开源库
- 5R 内存优化