package com.example.acer.rxjavatest;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import rx.Observer;
import rx.subjects.AsyncSubject;
public class MainActivity extends AppCompatActivity {
private AsyncSubject mMp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mMp = AsyncSubject.create();
}
public void click(View view) {
mMp.subscribe(new Observer<String>() {
@Override
public void onCompleted() {
Log.i("zhang_xin", "完成");
}
@Override
public void onError(Throwable e) {
Log.i("zhang_xin", "异常");
}
@Override
public void onNext(String s) {
Log.i("zhang_xin", "收到的消息:" + s);
}
});
}
public void send(View view) {
EditText et_content= (EditText) findViewById(R.id.et_content);
String content=et_content.getText().toString().trim();
mMp.onNext(content);
}
}
注意:我们在调用 mMp.onNext(content);之后需要调用
mMp.onCompleted();现在修改代码如下
package com.example.acer.rxjavatest;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import rx.Observer;
import rx.subjects.AsyncSubject;
public class MainActivity extends AppCompatActivity {
private AsyncSubject mMp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mMp = AsyncSubject.create();
}
public void click(View view) {
mMp.subscribe(new Observer<String>() {
@Override
public void onCompleted() {
Log.i("zhang_xin", "完成");
}
@Override
public void onError(Throwable e) {
Log.i("zhang_xin", "异常");
}
@Override
public void onNext(String s) {
Log.i("zhang_xin", "收到的消息 :" + s);
}
});
}
public void send(View view) {
EditText et_content= (EditText) findViewById(R.id.et_content);
String content=et_content.getText().toString().trim();
mMp.onNext(content);
//新添加的代码
mMp.onCompleted();
}
}
下面我们发送多条消息,代码如下:
package com.example.acer.rxjavatest;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import rx.Observer;
import rx.subjects.AsyncSubject;
public class MainActivity extends AppCompatActivity {
private AsyncSubject mMp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mMp = AsyncSubject.create();
}
public void click(View view) {
mMp.subscribe(new Observer<String>() {
@Override
public void onCompleted() {
Log.i("zhang_xin", "完成");
}
@Override
public void onError(Throwable e) {
Log.i("zhang_xin", "异常");
}
@Override
public void onNext(String s) {
Log.i("zhang_xin", "收到的消息 :" + s);
}
});
}
public void send(View view) {
mMp.onNext("张欣爱我一辈子");
mMp.onNext("张欣爱我两辈子");
mMp.onNext("张欣爱我三辈子");
mMp.onNext("张欣爱我四辈子");
mMp.onNext("张欣爱我五辈子");
mMp.onNext("张欣爱我六辈子");
mMp.onCompleted();
}
}
看下运行结果;
总结:
AsyncSubject的特点:1,我们在发送消息的时候,调用了onNext方法,必须还调用onComplete()方法提交,(类似于事务提交),否则观察者收不到任何消息
2,所有的观察者只能接受最新的一条消息