Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 안드로이드 유닛테스트란
- Rxjava Observable
- ar vr 차이
- 서비스 vs 쓰레드
- android retrofit login
- rxjava cold observable
- 객체
- 안드로이드 레트로핏 crud
- 2022 플러터 안드로이드 스튜디오
- 큐 자바 코드
- android ar 개발
- 클래스
- rxjava hot observable
- 2022 플러터 설치
- 플러터 설치 2022
- jvm 작동 원리
- 안드로이드 레트로핏 사용법
- 자바 다형성
- 서비스 쓰레드 차이
- 안드로이드 os 구조
- 스택 자바 코드
- 안드로이드 라이선스
- 멤버변수
- rxjava disposable
- ANR이란
- jvm이란
- 안드로이드 유닛 테스트
- 안드로이드 라이선스 종류
- 스택 큐 차이
- 안드로이드 유닛 테스트 예시
Archives
- Today
- Total
나만을 위한 블로그
[Rxjava] Rxjava를 사용한 구구단 예제 본문
728x90
반응형
Rxjava를 공부하기 위해 예제를 찾다가 입력한 숫자에 1~9를 곱한 결과값들을 텍스트뷰에 출력해주는 구구단 예제를 찾았는데, 아무것도 모르는 상태라 그런지 코드 분석 난이도가 불지옥 모드다.
이 예제를 통해서 Rxjava를 공부해나갈 예정이기 때문에 먼저 티스토리에 기록해둔다.
프로젝트 수준 gradle의 allProjects 부분은 아래와 같다.
allprojects {
repositories {
google()
jcenter()
maven { url "https://oss.jfrog.org/libs-snapshot" }
}
}
그리고 Rxjava를 사용하기 위해선 의존성 문구들이 필요한데, 아래 문구들을 앱 수준 gradle에 복붙하면 된다.
필요없는 것들이 있을 수 있지만 나중에 따로 찾아서 추가하기 귀찮기 때문에 그냥 써뒀다.
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
// RxJava, RxAndroid
implementation 'io.reactivex.rxjava2:rxjava:2.1.2'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
// RxLifecycle 2.x
implementation 'com.trello.rxlifecycle2:rxlifecycle-android:2.1.0'
implementation 'com.trello.rxlifecycle2:rxlifecycle:2.1.0'
implementation 'com.trello.rxlifecycle2:rxlifecycle-components:2.1.0'
// Utils
implementation 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
implementation 'com.jakewharton.timber:timber:4.4.0'
// Utils - butter-knife
implementation 'com.jakewharton:butterknife:10.0.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'
// UniversdalImageLoader
implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
XML 파일은 아래와 같다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".GugudanActivity">
<EditText
android:id="@+id/ed"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_margin="16dp" />
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_margin="16dp"
android:textColor="#000000"
android:textSize="20sp" />
</LinearLayout>
자바 파일은 아래와 같다.
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.widget.EditText;
import android.widget.TextView;
import butterknife.BindView;
import butterknife.ButterKnife;
import io.reactivex.Observable;
import io.reactivex.subjects.BehaviorSubject;
public class GugudanActivity extends AppCompatActivity
{
@BindView(R.id.ed)
EditText editText;
@BindView(R.id.tv)
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gugudan);
ButterKnife.bind(this);
BehaviorSubject<String> subject = BehaviorSubject.createDefault("0");
editText.addTextChangedListener(new TextWatcher()
{
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
//
}
@SuppressLint("CheckResult")
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
subject.map(dan -> editText.getText().toString().equals(""))
.flatMap(dan -> BehaviorSubject.range(1, 9),
(dan, row) -> 0 + "x" + row + " = " + 0 + "\n")
.scan((x, y) -> x + y)
.doOnNext(data -> Log.d("1번째 doOnNext()", data))
.subscribe(text -> textView.setText(text));
subject.map(dan -> Long.parseLong(editText.getText().toString()))
.flatMap(dan -> BehaviorSubject.range(1, 9),
(dan, row) -> dan + " x " + row + " = " + (dan * row) + "\n")
.scan((x, y) -> x + y)
.doOnNext(data -> Log.d("2번째 doOnNext()", data))
.subscribe(text -> textView.setText(text), Throwable::getMessage);
}
@Override
public void afterTextChanged(Editable s)
{
}
});
}
}
반응형
'개인 공부 > Rxjava' 카테고리의 다른 글
[Rxjava] 연산자의 종류와 생성 연산자(create, interval, just) (0) | 2021.05.26 |
---|---|
[Rxjava] Observable이란? - 2 - (0) | 2021.05.26 |
[Rxjava] Observable이란? - 1 - (0) | 2021.05.26 |
[Rxjava] 인텔리제이에서 Rxjava 사용하기 (0) | 2021.05.25 |
[Rxjava] Subject, BehaviorSubject란? (0) | 2021.05.08 |
Comments