首页 > 其他分享 >Android开发学习之路--RxAndroid之初体验

Android开发学习之路--RxAndroid之初体验

时间:2023-01-15 15:06:59浏览次数:59  
标签:observable 初体验 -- void private subscriber RxAndroid android public


    学了一段时间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 one rror(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之间可以对数据进行操作。

    

标签:observable,初体验,--,void,private,subscriber,RxAndroid,android,public
From: https://blog.51cto.com/u_15940062/6008698

相关文章

  • Android开发学习之路--Annotation注解简化view控件之初体验
      一般我们在写androidActivity的时候总是会在onCreate方法中加上setContentView方法来加载layout,通过findViewById来实现控件的绑定,每次写这么多代码总觉得很烦躁。近......
  • 人生顿悟之宽以待人,严以律己
        台风已经过去了,天气也渐渐地晴朗了,但是不知道为什么自己的心情却越发觉得沉重起来。    总觉得生活中少了点什么,是没有了以往的激情,还是多了几分压力。......
  • 初探linux子系统集之i2c子系统(一)
          I2c子系统在进公司来的时候就学习过了,可是那是还不是很熟悉linux中的i2c子系统,就没有细看。记得当初很想熟悉linux中的各种总线驱动,想专门写一个关于总线驱......
  • 初探linux子系统集之led子系统(三)
         世界杯结束了,德国战车夺得了大力神杯,阿根廷最终还是失败了。也许3年,5年,或者10年后,人们就不知道巴西世界杯的亚军是谁,但是总是会记得冠军是谁。就像什么考试,比......
  • Android开发学习之路--Android系统架构初探
      环境搭建好了,最简单的app也运行过了,那么app到底是怎么运行在手机上的,手机又到底怎么能运行这些应用,一堆的电子元器件最后可以运行这么美妙的界面,在此还是需要好好研究......
  • 初探linux子系统集之led子系统(二)
             巴西世界杯,德国7比1东道主,那个惨不忍睹啊,早上起来看新闻,第一眼看到7:1还以为点球也能踢成这样,后来想想,点球对多嘛6比1啊,接着就是各种新闻铺天盖地的来了......
  • app配置智能硬件的解决方案
    在此不再详述BLE、NFC等的设置,流程比较简单和统一。    市面上已经有的关于手机app配置智能硬件主要有以下几种,        这个方式相信没有难度,手机连......
  • 和菜鸟一起学linux总线驱动之i2c死锁问题
        不知不觉中已经有好几个月没有写点东西了,懒了就是懒了,说是忙着想把产品做得更好,都是借口,每天花一点时间来写点东西确实很不错,自己也坚持了很久很久,只不过今年以......
  • 人生总会遇到浑噩期,但是需要反思
        2013的最后一个月,到2014的3月,不经意间已经过去了3个月之久,而这三个月,不管是能力,还是其他各个方面,都没有得到锻炼,突然发现离梦想越来越远了。唯一值得庆幸的,就是......
  • 人生顿悟之梦想岂能丢掉
         清晨的马路,落叶飘洒,又是一个秋冬季,不知不觉,即将迎来新的一年----2014。2013,过得是那么的快,周而复始,难道就这样一直下去嘛。每一年都有一个梦想,年初总是信心满......