0
そうように私は、単一の連絡先を検索していた場合: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を使用してそれを行うだろうか? RxJavaはこれをどのようにして改善しますか?
ちょっと、わかりました。 ContactUriをObservable.just()に渡していますが、ここで何が起こっているのか詳しく教えてください。これは、インテントからデータを取得した後ですか?これを実行するには、onActivityResultのコールバックを待たなければなりませんか? – syfy
通常、rxパイプラインのオペレータは一度作成されました。 Observable.defer()演算子は、この演算子が呼び出されるたびに新しいパイプラインを作成するようrxJavaに指示します。あなたのURI(onActivityResultでこれを呼び出す)を実行し、バックグラウンドスレッド(.subscribeOn()演算子)に実行を切り替え、そのuriを「何らかの結果」に変換する - データベースから実際の連絡先を取得する(あなたは.onActivityResultで行いました)なぜなら、それは動作が遅く、メインスレッドではなく実行されるべきであるからです。 –
データベース(.map()演算子から問い合わせがあった後、PublishSubject(.subscribe()メソッドによって)に渡されます。 –