0
내가 지금과 같은 단일 접촉 검색 해요 경우 : 나는 RxJava를 사용 할 것 어떻게RxJava를 사용하여 연락처를 검색하는 방법은 무엇입니까?
private void pickContact() {
Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts"));
pickContactIntent.setType(Phone.CONTENT_TYPE);
startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == PICK_CONTACT_REQUEST) {
if (resultCode == RESULT_OK) {
Uri contactUri = data.getData();
String[] projection = {Phone.NUMBER};
Cursor cursor = getContentResolver()
.query(contactUri, projection, null, null, null);
cursor.moveToFirst();
int column = cursor.getColumnIndex(Phone.NUMBER);
String number = cursor.getString(column);
}
}
}
를? RxJava가 어떤 식 으로든 이것을 향상시킬 수 있습니까?
안녕하세요, 저는 혼란 스럽습니다. ContactUri를 Observable.just()에 건네고 있습니다. 여기서 무슨 일이 일어나고 있는지 자세히 설명해 주시겠습니까? 인 텐트에서 데이터를 검색 한 후입니까? 이것을 실행하기 위해 onActivityResult의 콜백을 기다려야합니까? – syfy
보통 한 번 생성 된 rx 파이프 라인의 운영자. Observable.defer() 연산자는이 연산자가 호출 될 때마다 rxJava에게 새로운 파이프 라인을 생성하도록 지시합니다. URI (onActivityResult에서 이것을 호출)를 실행하고 백그라운드 스레드 (.subscribeOn() 연산자)로 실행을 전환 한 다음 해당 uri를 'some result'로 변환합니다 - 데이터베이스에서 실제 연락처를 가져옵니다 (.onActivityResult에서 수행했습니다) 왜냐하면 이것은 느린 동작이고 메인 스레드가 아닌 동작이어야하기 때문이다. –
데이터베이스 (.map() 연산자에서 쿼리 한 후 PublishSubject (.subscribe() 메서드로 전달) –