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()方法) –