初心者用kotlin

kotlinのメモです。

1258 views

rxkotlinサンプル

package com.konishisoft.myapplication

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Button
import android.widget.Toast
import io.reactivex.Flowable
import io.reactivex.Single
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.rxkotlin.addTo
import io.reactivex.rxkotlin.subscribeBy
import io.reactivex.rxkotlin.toObservable
import io.reactivex.schedulers.Schedulers

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val btn = findViewById<Button>(R.id.button)
        btn.setOnClickListener {
            rxjavaTest()
            rxjavaTest5()
            rxjavaTest2()
            rxjavaTest3()
            rxjavaTest4()
            rxjavaTest6()
            Toast.makeText(this, "クリックされた", Toast.LENGTH_LONG).show()
        }
    }

    fun rxjavaTest() {
        val list = listOf(1, 2, 3)
        list.toObservable().subscribe{
            Log.d("rxjavatest", it.toString())
        }
    }

    fun rxjavaTest2() {
        //filterで5以上の値、mapで10倍して、購読者がログに表示するサンプル
        val flowable = Flowable.just(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
                .filter{it >= 5}.map{it*10}
        flowable.subscribe{
            Log.d("rxjavatest", it.toString())
        }
    }

    fun rxjavaTest3() {
        //Schedulers.newThreadにすることでサブスクライバー(購読者)は別スレッドで処理する
        //AndroidSchedulers.mainThread()を指定するとUIスレッドで動作することになる。要するに固まる
        //https://www.codeflow.site/ja/article/rxjava-schedulers#io
        //Schedulers.io
        val list = listOf(1, 2, 3)
        list.toObservable().subscribeOn(Schedulers.newThread())
                .subscribe{
            Thread.sleep(10000)
            Log.d("rxjavatest3", it.toString())
        }
    }

    fun rxjavaTest4() {
        //Schedulers.io()でもSchedulers.newThreadと似たような動き。
        //プールされているスレッドを使い、かつIOを伴う場合はこっちを使う方がよい
        //https://www.codeflow.site/ja/article/rxjava-schedulers#io
        //https://codezine.jp/article/detail/10159
        //Schedulers.io
        val list = listOf(1, 2, 3)
        list.toObservable().subscribeOn(Schedulers.io())
                .subscribe{
                    Thread.sleep(10000)
                    Log.d("rxjavatest3", it.toString())
                }
    }

    fun callfunc():String {
        return "aiueo"
    }
    fun rxjavaTest5() {
        Single.fromCallable{callfunc()}
                .subscribeOn(Schedulers.io())
                .observeOn(Schedulers.io())
                .subscribeBy{
                    Log.d("rxjavatest5", it)
                }.addTo(CompositeDisposable())

    }

    fun callfunc1():String {
        throw Exception("エラーです")
    }

    fun Success(str:String) {
        Log.d("rxjavatest6",str)
    }

    fun Error(e:Throwable) {
        Log.d("rxjavatest6",e.message)
    }

    fun rxjavaTest6() {
        Log.d("rxjavatest6", "callされました")
       val a = Single.fromCallable{callfunc1()}
            .subscribeOn(Schedulers.io())
            .observeOn(Schedulers.io())
            .subscribeBy(::Error, ::Success)
            .addTo(CompositeDisposable())
    }
}

fromCallableと似たようなものに、fromActionというものがあり、違いがわからない。
以下のサイトの話だと、便宜的なもので、やっていることは同じらしい。

https://stackoverflow.com/questions/62450133/difference-between-rxjava2-completable-fromaction-vs-completable-fromcallable

Page 19 of 36.

前のページ 次のページ



[添付ファイル]


お問い合わせ

プロフィール

マッスル

自己紹介

本サイトの作成者。
趣味:プログラム/水耕栽培/仮想通貨/激辛好き
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
仮想通貨はNEMが好き。
水耕栽培は激辛好きが高じて、キャロライナ・リーパーの栽培にチャレンジ中。

サイト/ブログ

https://www.osumoi-stdio.com/pyarticle/

ツイッター

@darkimpact0626