RxJava 의 combineLatest 사용 - EditText 이용 예제
1. Reactivex 사이트 - http://reactivex.io/documentation/operators/combinelatest.html
2. Realm 참고 - https://realm.io/kr/news/rxandroid-3/
RxJava 의 combineLatest 를 사용해서 2개의 EditText 의 값을 받아서 버튼을 누르면 두개의 EditText 에 무엇인가가 들어갔을 경우 Toast 에서 "로그인" 혹은 "실패"를 띄우는 예제입니다.
1. Activity 생성
1 2 3 4 5 6 7 8 9 | public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } } | cs |
2. Xml 에 EditText 를 2개, Button 1개를 생성
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 32 33 34 | <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" tools:context="com.example.jihoonryu.rxandroidtest.MainActivity"> <EditText android:id="@+id/et" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> <EditText android:layout_below="@id/et" android:id="@+id/et2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> <Button android:layout_below="@id/et2" android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="login"/> </RelativeLayout> | cs |
3. EditText, Button 객체 생성을 합니다.
1 2 3 | EditText editText = (EditText) findViewById(R.id.et); EditText editText2 = (EditText) findViewById(R.id.et2); Button button = (Button) findViewById(R.id.btn); | cs |
4. Button 을 눌렀을 경우 체크를 합니다.
1 2 3 4 5 6 | button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { } }); | cs |
5. CombineLatest 사용
combineLatest 는 여러 조건들이 다 모여서 처리해야할 때 사용합니다.
두개 이상의 Observable 이 나올때, combineLatest에 Observable 을 받아서 처리하면 됩니다.
여기서 Observable.just() 을 통해서 아이템을 발행합니다. just() 안의 타입에 의해서 (a,b) -> a or b 의 타입이 정해집니다. 예를 들어서 저는 String 타입이기 때문에 (a,b) 의 각각 a,b 의 타입이 String 입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Observable.combineLatest(Observable.just(editText.getText().toString()) , Observable.just(editText2.getText().toString()) , (a, b) -> !TextUtils.isEmpty(a) && !TextUtils.isEmpty(b)) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.computation()).subscribe(o -> { if (o) { Toast.makeText(context, "로그인", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(context, "실패", Toast.LENGTH_SHORT).show(); } })); } }); | cs |
6. 결과 화면
EditText 두개 모두 빈값일 경우
EditText 한개만 빈 값일 경우
EditText 두개 모두 채워질 경우
'Dev > Android' 카테고리의 다른 글
RxJava - RxAndroid 공부 (0) | 2017.02.22 |
---|---|
[Android] 안드로이드 - 폴더 안의 파일 이름 가져오기 (3) | 2017.02.21 |
Android - Screen Capture / 스크린캡쳐 하기 (2) | 2017.02.17 |
[Android] 안드로이드 Retrofit2 예제 따라하기 - example (1) | 2017.02.04 |
[Android] 안드로이드 TextUtils - TextView 빈값 null 검사 (0) | 2017.02.02 |