RxjavaRxAndroid小例

我们写一个首字母为a的,后面加上字符串的案例:读这篇文章之前一定要读一下之前的Rxjava,Rxandroid的简介那篇文章:

  
  
package com.example.alan.play;
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
 
import rx.Observable;
import rx.Observer;
import rx.functions.Func1;
 
 
public class MainActivity extends AppCompatActivity {
 
String[] arr={"afdsa" , "bfdsa","cfda"};
 
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Observable<String> observable = Observable.from(arr);
// Func1,是一个自带的方法。这里的String 参数,就是我们arr的那个数组中的每一个元素。
// 因为他已经知道我们是String 类型的数组,所以,里面就是数组元素的类型。boolean的规则由我们来决定。
// 他将过滤之后的结果返回给filterResult.
Observable<String> filterResult = observable.filter(new Func1<String, Boolean>() {
 
@Override
public Boolean call(String s) {
 
return s.startsWith("a");
}
});
 
// 接着我们就简单的继续写我们的observer
 
Observer<String> observer = new Observer<String>() {
@Override
public void onCompleted() {
 
}
 
@Override
public void onError(Throwable e) {
 
}
 
@Override
public void onNext(String s) {
String temp = s + "from Alpha";
System.out.println(temp.length());
}
 
 
};
 
 
// 接着就是把两个关联起来
filterResult.subscribe(observer);
}
 
void fun2(){
for(int i = 0;i < arr.length;i++){
String temp=arr[i];
if(temp.startsWith("a")){
temp+="from Alpha";
System.out.println(temp.length());
 
}
 
 
}
 
}
}


但是在这之中fun2没有用上,是我们为了演示,先写的一段java代码。
可以看到很流畅,先写被观察者,后写观察者,最后关联。基本的步骤。

tips:只是处理onnext事件的observer,我们可以用action方法替代。

综合java的语法,我们做了如下处理:
形成第二版的代码:
   
   
package com.example.alan.play;
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
 
import rx.Observable;
import rx.functions.Action1;
import rx.functions.Func1;
 
 
public class MainActivity extends AppCompatActivity {
 
String[] arr={"afdsa" , "bfdsa","cfda"};
 
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Observable
.from(arr)
.filter(new Func1<String, Boolean>() {
 
@Override
public Boolean call(String s) {
 
return s.startsWith("a");
}
}).subscribe(new Action1<String>() {
@Override
public void call(String s) {
String temp = s + "from Alpha";
System.out.println(temp.length());
}
 
});
}
}


发现代码量变得很少。(只有next方法的,我们可以用Action方法取代。)
接着,我们使用mapping取代filter。
   
   
package com.example.alan.play;
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
 
import rx.Observable;
import rx.functions.Action1;
import rx.functions.Func1;
 
 
public class MainActivity extends AppCompatActivity {
 
String[] arr={"afdsa" , "bfdsa","cfda"};
 
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Observable
.from(arr)
// 做数据转换的,用一个数据转换成另外一个数据。
.map(new Func1<String, String>() {
@Override
public String call(String s) {
return s + " from Alpha";
}
})
.subscribe(new Action1<String>() {
@Override
public void call(String s) {
System.out.println(s.length());
}
 
});
}
}

上面两个代码反复写两遍,ok,那么可以自己写了。

我做了一个案例:如果button的内容是什么,我们改变,testview里面的东西

   
   
package com.example.alan.play;
 
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Button;
import android.widget.TextView;
 
import butterknife.Bind;
import butterknife.ButterKnife;
import rx.Observable;
import rx.functions.Action1;
import rx.functions.Func1;
 
public class MainActivity extends AppCompatActivity {
 
 
@Bind(R.id.tv)
TextView tv;
@Bind(R.id.but)
Button but;
// 一个订阅器,一个呗观察对象
String[] arr={"afdsa" , "bfdsa","cfda"};
 
 
 
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
Observable.just(but.getText())
.filter(new Func1<CharSequence, Boolean>() {
@Override
public Boolean call(CharSequence charSequence) {
return charSequence.equals("组件");
}
})
.subscribe(new Action1<CharSequence>() {
@Override
public void call(CharSequence charSequence) {
try {
Thread.sleep(20000);
} catch (InterruptedException e) {
e.printStackTrace();
}
tv.setText("我改变了"+charSequence);
}
});
 
}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值