RxJava的android初步快速学习与理解使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/QianNiYouShouZuo/article/details/52510534

结尾会奉上GitHub地址  

以及AS完整源码压缩包下载地址

希望大家多多支持 ~ ~  因为新项目要启动了,没有太多时间写文章了现在,但是源码里面的注释非常详细,直接上代码就能看懂了,真的。

本人也是第一次接触RxJava,看了很多资料,初始对此有了一定的了解,分享给刚同样接触RxJava的大家

RxJava 是一种异步机制,现在异步机制很多,为什么要学习RxJava是有一定的原因的,这个原因大家可以通过其他资料去了解一下

我也刚接触这个,不能用自己的一知半解来误导了大家。

不过RxJava的基本使用是没有问题的。

Demo 中简单讲解了 RxJava 的实现,以及一些常用的方法的解释与实现。

这里只是做一下让初学者能够 快速理解,并初步使用RaJava。

后续等我再深入学习之后还会讲解实现一下RxJava中其他更多的功能,以及RxJava中更深的知识,完善这个Demo,与大家一起分享学习的过程。

先是APP里面的 gradle文件配置:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.0"

    defaultConfig {
        applicationId "com.ywp.rxjavademo"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }


}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.0.0'
    compile 'io.reactivex:rxjava:1.1.5'
    compile 'io.reactivex:rxandroid:1.2.0'
}

然后是主页的Rx的主要使用方法:

package com.ywp.rxjavademo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

import rx.Observable;
import rx.Observer;
import rx.Subscriber;

public class MainActivity extends AppCompatActivity {

    private Observer<String> mObserver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initData();

    }

    /**
     * 先初始化一个观察者
     */
    private void initData() {
        // 创建一个观察者 方便重复观察下面的方法
        mObserver = new Observer<String>() {
            @Override
            public void onCompleted() {
                // 接收已经完成
                Log.i("onCompleted", "接收已经完成");
                Toast.makeText(MainActivity.this, "接收已经完成", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onError(Throwable e) {
                // 接收发生错误
            }

            @Override
            public void onNext(String o) {
                // 接收到消息
                Log.i("onNext", o);
                Toast.makeText(MainActivity.this, o, Toast.LENGTH_SHORT).show();
            }
        };
    }

    /**
     * create方式
     * 按调用onNext()的顺序来发送消息
     *
     * @param view
     */
    public void create(View view) {
        // 创建一个被观察者
        Observable mObservable = Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                //  一条一条消息顺序发送
                subscriber.onNext("第一个create");
                subscriber.onNext("第二个create");
                subscriber.onNext("最后一个create");
                //  发送完成,会调用ObserveronCompleted方法
                subscriber.onCompleted();
            }
        });

        // 将被观察者与观察者关联起来
        mObservable.subscribe(mObserver);
    }

    /**
     * just方式
     * 按参数顺序来发送消息,不需要再调用onNext()方法
     * 消息发送完后会自动调用onCompleted()方法
     *
     * @param view
     */
    public void just(View view) {
        // 参数最多达到 10 个,源码里面有.
        // 发送完成后会自动调用onCompleted()方法,看效果就很清楚了
        Observable<String> mObservable = Observable.just("第一个just", "第二个just", "第三个just");
        mObservable.subscribe(mObserver);
    }

    /**
     * repeat方式
     * 这是重复发送消息的一个方法,可以create().repeat(),也可以just().repeat()这样使用
     * 当然待会要讲到的其他方法也是可以使用repeat()     *
     * @param view
     */
    public void repeat(View view) {
        //还是用上面这个例子吧
        // repeat()里面的参数代表重复的次数,但是只有重复完了所有消息的发送之后才会调用onCompleted()方法
        // onCompleted()方法只会在最后调用一次,同样看效果就很清楚了
        Observable<String> mObservable = Observable.just("第一个just", "第二个just", "第三个just").repeat(2);
        mObservable.subscribe(mObserver);
    }

    /**
     * timer()方式
     * 根据名字应该知道 这是一个定时器功能的方法
     * 可以设定一个特定的时间再发送消息
     *
     * @param view
     */
    public void timer(View view) {
        // 还是用上面这个例子吧
        // 2s 后发送,还有别的参数可以自行看下源码
        // 这里我弄了很久,最后发现它发送的是一个long型的值,为0,看Log日志就知道了
        // 在这里理解不是太深,大家有明白的可以留言指导一下我,多谢

        Observable mObservable = Observable.timer(2, TimeUnit.SECONDS);
        Observer mObserver = new Observer() {
            @Override
            public void onCompleted() {
                Log.i("onCompleted", "接收已经完成");
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Object o) {
                // 在这里 看到了这个值为long类型
                Log.i("onNext", o.getClass().toString());
                if (o instanceof Long) {
                    // 在这里 将这个值打印出来,为 0
                    Log.i("onNext", o.toString());
                }
            }
        };
        mObservable.subscribe(mObserver);
    }

    /**
     * from()方式
     * from 方法可以通过遍历集合 来发送每一个item
     * item可以是其他对象
     *
     * @param view
     */
    public void from(View view) {
        // 集合item也可以为其他的对象,Observer对应一下类型就可以了
        // 其实我觉得可以在Observer那里使用泛型,可以解决类型多样的问题
        List<String> mList = new ArrayList<>();
        mList.add("第一个from");
        mList.add("第二个from");
        mList.add("第三个from");
        Observable mObservable = Observable.from(mList);
        mObservable.subscribe(mObserver);
    }
}

一些小提示配图:

这里可以知道这个类型,以及这个值为多少。

这里可以知道just()参数最多支持10个。应该是这样 ~ ~

GitHub地址:https://github.com/ywp0919/RxJavaDemo

AS完整源码压缩包下载地址:http://download.csdn.net/detail/qianniyoushouzuo/9626536

谢谢大家支持 ~ ~

猜你喜欢

转载自blog.csdn.net/QianNiYouShouZuo/article/details/52510534