• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android开发学习之路--RxAndroid之初体验

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

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了Android开发学习之路--RxAndroid之初体验等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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


学了一段时间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 subscriber;
    private Observable 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() {

            @Override
            public void onCompleted() {
                Log.d(TAG, "onCompleted");
            }

            @Override
            public void onError(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() {
            @Override
            public void call(Subscriber subscriber) {
                subscriber.onNext(getHello());
                subscriber.onCompleted();
            }
        });
        bindSubscriber();
    }
}
布局文件如下:
<!--{cke_protected}{C}%3C!%2D%2D%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%2D%2D%3E-->
<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"></button></textview></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() {
            @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() {
            @Override
            public String call(String s) {
                return s + " by eastmoon";
            }
        }).subscribe(onNextAction);
    }

运行结果后原来字符串加上了by eastmoon了。其实map的功能就是在observable和subscribe之间可以对数据进行操作。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-26android自定义控件(二),简易的数值输入器
  • 2017-05-26Android,androidstudio
  • 2017-05-26Android开发5:应用程序窗口小部件App Widgets的实现,androidwidgets
  • 2017-05-26Android中使用Notification实现宽视图通知栏(Notification示例二),notification大视图
  • 2017-05-26关于Pacemaker集群配置的版本
  • 2017-05-26年底了,给MySQL做个例行巡检吧
  • 2017-05-26谈谈Android中的Divider,AndroidDivider
  • 2017-05-26Android5.0开发范例大全 读书笔记(六),android5.0范例
  • 2017-05-26JRebel for Android 1.0发布!,jrebelandroid
  • 2017-05-26我的android学习经历9,android学习经历9

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android 跳转到系统设置界面汇总
    • 深度剖析:Android_PullToRefresh
    • 安卓开源项目周报1214,安卓开源项目1214
    • android studio快捷键,androidstudio
    • Android设置透明状态栏和透明导航栏,android导航栏
    • Android React-Native系列之(一)零基础搭建React-Native开发环境
    • 安卓第一天笔记,安卓第一天
    • 利用散列连接从DB2通用数据库获得最佳性能
    • 安卓多线程间通信和多进程之间通信有什么不同?分别怎么实现?,安卓多线程
    • Android基于回调的事件处理

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有