คำถามติดแท็ก rx-java

RxJava - Reactive Extensions สำหรับ JVM - ไลบรารีสำหรับการเขียนโปรแกรมแบบอะซิงโครนัสและตามเหตุการณ์โดยใช้ลำดับที่สังเกตได้สำหรับ Java VM

9
เมื่อใดที่ควรใช้ RxJava Observable และเมื่อโทรกลับอย่างง่ายบน Android
ฉันกำลังทำงานกับเครือข่ายสำหรับแอปของฉัน ดังนั้นผมจึงตัดสินใจที่จะลองของจัตุรัสติดตั้งเพิ่ม ฉันเห็นว่าพวกเขาสนับสนุนเรียบง่ายCallback @GET("/user/{id}/photo") void getUserPhoto(@Path("id") int id, Callback<Photo> cb); และ RxJava's Observable @GET("/user/{id}/photo") Observable<Photo> getUserPhoto(@Path("id") int id); ทั้งคู่ดูคล้ายกันตั้งแต่แรกเห็น แต่เมื่อนำไปใช้งานมันน่าสนใจ ... ในขณะที่การใช้งานการโทรกลับง่ายจะมีลักษณะคล้ายกับนี้ api.getUserPhoto(photoId, new Callback<Photo>() { @Override public void onSuccess() { } }); ซึ่งค่อนข้างง่ายและตรงไปตรงมา และด้วยObservableอย่างรวดเร็วได้รับ verbose และค่อนข้างซับซ้อน public Observable<Photo> getUserPhoto(final int photoId) { return Observable.create(new Observable.OnSubscribeFunc<Photo>() { @Override public Subscription …

3
ใช้กรณีสำหรับ RxJava schedulers
ใน RxJava มี5 ตัวเลือกที่แตกต่างกันให้เลือก: ทันที () : สร้างและส่งคืน Scheduler ที่ทำงานทันทีบนเธรดปัจจุบัน trampoline () : สร้างและส่งคืน Scheduler ที่จัดคิวงานบนเธรดปัจจุบันที่จะดำเนินการหลังจากงานปัจจุบันเสร็จสมบูรณ์ newThread () : สร้างและส่งคืน Scheduler ที่สร้างเธรดใหม่สำหรับแต่ละหน่วยงาน การคำนวณ () : สร้างและส่งคืน Scheduler สำหรับการคำนวณ สามารถใช้สำหรับการวนรอบเหตุการณ์การประมวลผลการเรียกกลับและงานคำนวณอื่น ๆ อย่าทำงานที่ถูกผูกไว้กับ IO บนตัวกำหนดตารางเวลานี้ ใช้ Schedulers io ()แทน io () : สร้างและส่งคืน Scheduler สำหรับงานที่มีขอบเขต IO การใช้งานได้รับการสนับสนุนโดยเธรดพู Executionor ที่จะเติบโตตามที่ต้องการ สามารถใช้สำหรับการบล็อก IO แบบอะซิงโครนัส …

2
ความแตกต่างระหว่างอนาคตที่สมบูรณ์ในอนาคตและ RxJava ที่สังเกตได้
ผมอยากจะทราบความแตกต่างระหว่าง CompletableFuture, และFutureObservable RxJava สิ่งที่ฉันรู้คือทั้งหมดนั้นไม่ตรงกัน แต่ Future.get() บล็อกเธรด CompletableFuture ให้วิธีการโทรกลับ RxJava Observable--- คล้ายCompletableFutureกับผลประโยชน์อื่น ๆ (ไม่แน่ใจ) ตัวอย่างเช่น: หากลูกค้าต้องการใช้บริการหลายสายและเมื่อเราใช้Futures(Java) Future.get()จะถูกดำเนินการตามลำดับ ... ต้องการทราบว่า RxJava ดีกว่าได้อย่างไร และเอกสารประกอบhttp://reactivex.io/intro.htmlกล่าว เป็นการยากที่จะใช้ฟิวเจอร์สในการเขียนขั้นตอนการดำเนินการแบบอะซิงโครนัสตามเงื่อนไขอย่างเหมาะสมที่สุด (หรือเป็นไปไม่ได้เนื่องจากเวลาแฝงของแต่ละคำขอแตกต่างกันที่รันไทม์) สามารถทำสิ่งนี้ได้ แต่มันจะซับซ้อนอย่างรวดเร็ว (และทำให้เกิดข้อผิดพลาดได้ง่าย) หรือบล็อกอยู่บน Future.get () ก่อนกำหนดซึ่งจะกำจัดข้อดีของการประมวลผลแบบอะซิงโครนัส สนใจจริงๆที่จะรู้วิธีRxJavaแก้ปัญหานี้ ฉันพบว่ามันยากที่จะเข้าใจจากเอกสาร

10
คุณใช้ map vs flatMap เมื่อใดใน RxJava
เมื่อไหร่ที่คุณใช้mapVS flatMapในRxJava ? ตัวอย่างเช่นเราต้องการจับคู่ไฟล์ที่มี JSON เป็น Strings ที่มี JSON-- ใช้mapเราต้องจัดการกับExceptionอย่างใด แต่อย่างไร: Observable.from(jsonFile).map(new Func1<File, String>() { @Override public String call(File file) { try { return new Gson().toJson(new FileReader(file), Object.class); } catch (FileNotFoundException e) { // So Exception. What to do ? } return null; // Not good :( } }); ใช้flatMapมัน …
180 java  mapping  rx-java  flatmap 

7
ความแตกต่างระหว่าง flatmap และ switchmap ใน RxJava คืออะไร?
rxjava docคำนิยามของ switchmap ค่อนข้างคลุมเครือและจะเชื่อมโยงไปยังหน้าเดียวกันเป็น flatmap ความแตกต่างระหว่างผู้ประกอบการทั้งสองคืออะไร?

7
ความแตกต่างระหว่าง Java 8 สตรีมและ RxJava ที่สังเกตได้
Java 8 สตรีมคล้ายกับ RxJava หรือไม่ การกำหนดสตรีม Java 8: คลาสในjava.util.streamแพ็คเกจใหม่มี Stream API เพื่อรองรับการทำงานในรูปแบบการใช้งานในส่วนขององค์ประกอบ

3
สังเกตได้เทียบกับที่ไหลได้ rxJava2
ฉันได้ดู rx java 2 ใหม่และฉันไม่ค่อยแน่ใจว่าฉันเข้าใจความคิดของbackpressureอีกต่อไป ... ฉันรู้ว่าเรามีObservableสิ่งนั้นที่ไม่มีbackpressureการสนับสนุนและFlowableนั่นก็มี จากตัวอย่างสมมติว่าฉันมีflowableกับinterval: Flowable.interval(1, TimeUnit.MILLISECONDS, Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<Long>() { @Override public void accept(Long aLong) throws Exception { // do smth } }); สิ่งนี้จะผิดพลาดหลังจากประมาณ 128 ค่าและเห็นได้ชัดว่าฉันใช้เวลาช้ากว่าการรับไอเท็ม แต่เราก็มีเหมือนกัน Observable Observable.interval(1, TimeUnit.MILLISECONDS, Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<Long>() { @Override public void accept(Long aLong) throws Exception { // do …
128 java  android  rx-java 

2
อะไรคือความแตกต่างระหว่าง Observable, Completable และ Single ใน RxJava
ใครช่วยอธิบายความแตกต่างระหว่าง Observable, Completable และ Single ใน RxJava พร้อมตัวอย่างที่ชัดเจนได้ไหม ในสถานการณ์ใดที่เราใช้หนึ่งมากกว่าคนอื่น ๆ ?
114 rx-java  rx-java2 

3
รับรหัสสถานะการตอบกลับโดยใช้ Retrofit 2.0 และ RxJava
ฉันกำลังพยายามอัปเกรดเป็น Retrofit 2.0 และเพิ่ม RxJava ในโปรเจ็กต์ Android ของฉัน ฉันกำลังทำการเรียก API และต้องการดึงรหัสข้อผิดพลาดในกรณีที่มีการตอบสนองข้อผิดพลาดจากเซิร์ฟเวอร์ Observable<MyResponseObject> apiCall(@Body body); และในการเรียก RxJava: myRetrofitObject.apiCall(body).subscribe(new Subscriber<MyResponseObject>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(MyResponseObject myResponseObject) { //On response from server } }); ใน Retrofit 1.9 RetrofitError ยังคงมีอยู่และเราสามารถรับสถานะได้โดยทำ: error.getResponse().getStatus() …

3
ไม่สามารถสร้าง call adapter สำหรับ io.reactivex.Observable
ฉันจะส่งเมธอด get ง่ายๆไปยังเซิร์ฟเวอร์ของฉัน (มันคือแอพ Rails) และรับผลลัพธ์โดยใช้ RxJava และ Retrofit สิ่งที่ฉันทำคือ: อินเทอร์เฟซของฉัน: public interface ApiCall { String SERVICE_ENDPOINT = "https://198.50.214.15"; @GET("/api/post") io.reactivex.Observable<Post> getPost(); } โมเดลของฉันคือ: public class Post { @SerializedName("id") private String id; @SerializedName("body") private String body; @SerializedName("title") private String title; public String getId () { return id; } public String …

14
rxjava: ฉันสามารถใช้ retry () แต่มีความล่าช้าได้หรือไม่?
ฉันใช้ rxjava ในแอพ Android เพื่อจัดการคำขอเครือข่ายแบบอะซิงโครนัส ตอนนี้ฉันต้องการลองอีกครั้งคำขอเครือข่ายที่ล้มเหลวหลังจากผ่านไประยะหนึ่งแล้วเท่านั้น มีวิธีใดบ้างในการใช้ retry () บน Observable แต่จะลองอีกครั้งหลังจากเกิดความล่าช้าบางอย่างเท่านั้น มีวิธีใดที่จะแจ้งให้ผู้สังเกตการณ์ทราบว่ากำลังถูกลองใหม่ (ซึ่งตรงข้ามกับการทดลองในครั้งแรก) หรือไม่? ฉันได้ดู debounce () / throttleWithTimeout () แต่ดูเหมือนว่าพวกเขาจะทำอะไรบางอย่างที่แตกต่างออกไป แก้ไข: ฉันคิดว่าฉันพบวิธีหนึ่งที่จะทำได้ แต่ฉันสนใจที่จะยืนยันว่านี่เป็นวิธีที่ถูกต้องในการทำหรือวิธีอื่นที่ดีกว่า สิ่งที่ฉันกำลังทำอยู่นี้: ในวิธี call () ของ Observable OnSubscribe ของฉันก่อนที่ฉันจะเรียกใช้เมธอด Subscribers onError () ฉันเพียงแค่ปล่อยให้เธรดเข้าสู่โหมดสลีปตามระยะเวลาที่ต้องการ ดังนั้นในการลองใหม่ทุกๆ 1,000 มิลลิวินาทีฉันจะทำสิ่งนี้: @Override public void call(Subscriber<? super List<ProductNode>> subscriber) { try { …
94 java  rx-java 

8
รวมรายชื่อ Observables และรอจนกว่าทั้งหมดจะเสร็จสมบูรณ์
TL; DR วิธีการแปลงTask.whenAll(List<Task>)เป็นRxJava? รหัสที่มีอยู่ของฉันใช้ Bolts เพื่อสร้างรายการงานแบบอะซิงโครนัสและรอจนกว่างานเหล่านั้นทั้งหมดจะเสร็จสิ้นก่อนที่จะดำเนินการขั้นตอนอื่น ๆ โดยพื้นฐานแล้วมันสร้างขึ้นList<Task>และส่งกลับคนเดียวTaskที่ถูกทำเครื่องหมายเป็นเสร็จสมบูรณ์เมื่อทุกงานในรายการเสร็จสมบูรณ์ตามตัวอย่างเช่นในเว็บไซต์ของสกรู ฉันต้องการแทนที่Boltsด้วยRxJavaและฉันสมมติว่าวิธีนี้ในการสร้างรายการงาน async (ขนาดที่ไม่ทราบล่วงหน้า) และรวมทั้งหมดเป็นงานเดียวObservableเป็นไปได้ แต่ฉันไม่รู้ว่าจะทำอย่างไร ฉันได้พยายามมองหาที่merge, zip, concatฯลฯ ... แต่ไม่สามารถได้รับการทำงานในList<Observable>ที่ฉันต้องการจะสร้างขึ้นเป็นพวกเขาทั้งหมดดูเหมือนมุ่งไปที่การทำงานในเวลาเพียงสองObservablesในเวลาถ้าผมเข้าใจเอกสารอย่างถูกต้อง ฉันกำลังพยายามเรียนรู้RxJavaและยังใหม่อยู่มากดังนั้นโปรดยกโทษให้ฉันหากนี่เป็นคำถามที่ชัดเจนหรืออธิบายไว้ในเอกสารที่ไหนสักแห่ง ฉันได้ลองค้นหาแล้ว ความช่วยเหลือใด ๆ จะได้รับการชื่นชมมาก

1
การติดตั้งเพิ่มด้วย Rxjava Schedulers.newThread () เทียบกับ Schedulers.io ()
สิ่งที่เป็นประโยชน์ต่อการใช้Schedulers.newThread()VS Schedulers.io()ในRetrofitคำขอของเครือข่าย ฉันได้เห็นตัวอย่างมากมายที่ใช้io()แต่ฉันต้องการเข้าใจว่าทำไม ตัวอย่างสถานการณ์: observable.onErrorResumeNext(refreshTokenAndRetry(observable)) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread())... เทียบกับ observable.onErrorResumeNext(refreshTokenAndRetry(observable)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread())... หนึ่งในเหตุผลที่ฉันเห็นคือ - newThread()สร้างเธรดใหม่สำหรับแต่ละหน่วยงาน io()จะใช้เธรดพูล แต่อะไรคืออิทธิพลของข้อโต้แย้งที่มีต่อแอป แล้วมีแง่มุมอะไรอีกบ้าง?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.