1、什么是RxJava/RxAndroid?
它是一种帮助你做异步的框架。
2、RxJava/RxAndroid有什么好处?
Android本身提供了Hander和AsyncTask来进行异步操作,目的是让异步操作更为简洁,但RxJava/RxAndroid更为简洁,随着程序逻辑的复杂,依然能够保持简洁。
3,RxJava/RxAndroid的使用。
本文针对的是RxJava/RxAndroid的使用,不针对原理的分析,目的是入门。
rxJava中涉及到4个概念:
Observable
(可观察者,即被观察者)、
Observer
(观察者)、
subscribe
(订阅)、事件。
Observable
和
Observer
通过
subscribe()
方法实现订阅关系,从而
Observable
可以在需要的时候发出事件来通知
Observer
数据刷新
简单实现如下:
1) 创建 Observer(被观察者对象)
//Observable部分,被观察者部分
Observable<String> myObservable=Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("我是被观察的对象");
subscriber.onCompleted();
}
});
2) 创建Subscriber(观察者对象)
//Subscriber部分,观察者部分
Subscriber<String> mySubscriber=new Subscriber<String>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String s) {
text.setText(s);
}
};
3) Observer和Subscriber关联
myObservable.subscribe(mySubscriber);
具体实现方法:
1>在工程文件的Build.gradle(app)中添加依赖
compile 'io.reactivex:rxandroid:1.1.0' // RxAndroid compile 'io.reactivex:rxjava:1.1.0'2>新建了一个Demo可简单展示
1、xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/text0_simple1"
android:text="你好"/>
<Button
android:id="@+id/button0_simple1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="button0_simple1"/>
</LinearLayout>
2、java文件
package com.example.app_rx_android;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;
import rx.Observable;
import rx.Subscriber;
public class Simple1Activity extends AppCompatActivity {
@Bind(R.id.text0_simple1)
TextView text0_simple1;
@Bind(R.id.button0_simple1)
Button button0_simple1;
private static final String TAG="MainActivity";
private Subscriber<String> subscriber;
private Observable<String> observable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple1);
ButterKnife.bind(this);
onCreateSubscriber();
}
/**
* 创建观察者对象
*/
private void onCreateSubscriber(){
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 s) {
Log.d(TAG,"onNext");
text0_simple1.setText(s);
}
};
}
private String getString0(){
return "我是尽途";
}
private String getString1(){
return "你好,尽途";
}
@OnClick(R.id.button0_simple1)
public void onclick(){
createObservable();
}
/**
* 创建被观察者对象
*/
private void createObservable(){
observable=Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext(getString0());
subscriber.onCompleted();
}
});
observable.subscribe(subscriber);//实现关联
}
}
3>实现效果和相关问题
代码片段中的ButterKnife为一个挺好用的view注入框架,在此不再赘述。