Tag: RX java

用RX和Kotlin编写网络请求

我正在使用与RXJava和Retrofit进行网络调用的kotlin的Android应用程序。 在启动时,应用程序将对类似REST的后端执行多个网络调用。 该程序看起来非常像Netflix在其示例中使用的程序。 然而,当试图重写它与Kotlin一起工作时,我正在挣扎。 我很难理解Kotlin关闭中的回报如何工作。 非常感谢这里的一些帮助! Netflix的例子: return getUser(userId).flatMap(user -> { Observable<Map<String, Object>> catalog = getPersonalizedCatalog(user) .flatMap(catalogList -> catalogList.videos().<Map<String, Object>> flatMap( video -> { Observable<Bookmark> bookmark = getBookmark(video); Observable<Rating> rating = getRatings(video); Observable<VideoMetadata> metadata = getVideoMetadata(video); return Observable.zip(bookmark, rating, metadata, (b, r, m) -> combineVideoData(video, b, r, m)); })); Observable<Map<String, Object>> social = getSocial(user).map(s -> […]

将RxJava代码正确转换为Kotlin

我正在学习Kotlin和RxJava。 我在Java中拥有这样的代码: public class MainActivity extends AppCompatActivity { private HashMap<String, Object> cacheToInsertToDb; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); cacheToInsertToDb = new HashMap<>(); Observable.interval(1, TimeUnit.SECONDS) .take(30) // up to 30 items .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<Long>() { @Override public void accept(Long aLong) throws Exception { cacheToInsertToDb.put(aLong+"", aLong); Log.d("Observable", cacheToInsertToDb.values().toString()); } }, new Consumer<Throwable>() { @Override public […]

Kotlin:“return @”是什么意思?

我在我的一个项目中使用了RxJava,我使用Android Studio插件将其中的一个类转换为Kotlin,在flatMap lambda(java中的Func1)之一中,中间体返回类似于下面的@Func1 。 我不知道这是什么意思。 something.flatMap(Func1<ArticleCriteria, Observable<Pair<String, String>>> { val isTemporaryClone = it.isATemporaryClone val isTheOriginalToken = it.tokenIsOriginalHere if (isTemporaryClone) { if (!isTheOriginalToken) { return@Func1 paramsError("Token is always original for temp articles") } return@Func1 mJobRunner.doNotRun(DeleteArticleJob.TAG) .doOnNext(deletePersonalActionById(articleId)) } runArticleJobAsync(DeleteArticleJob.TAG, it) })

Android库不能编译kotlin

我的项目有两个项目: main project和library project 。 main project依赖library project 。 现在我想用kotlin他们两个。 我已经将我的common rx extension code添加到library project : fun String.rxRequest(@NotNull builder: (Request.Builder) -> Unit): Observable<Response> = Observable.create<Response> { var mBuilder: Request.Builder = Request.Builder().url(this) builder.invoke(mBuilder); it.onNext(HttpClient.create().newCall(mBuilder.build()).execute()) it.onCompleted() }.subscribeOn(Schedulers.from(THREAD_POOL_NET)); 然后我在我的main project调用这个函数: "http://www.xxx.xxx".rxRequest { val requestBody = FormEncodingBuilder().add("code", code).build() it.post(requestBody) .header("XRDid", appInfo.deviceId) } 它建立失败: LoginPresenter.kt: Unresolved reference: rxRequest library project构建成功,生成在build文件夹中的kotlin […]

Kotlin通配符方法

我在使用retryWhen中的retryWhen函数时遇到了一些问题。 当我创建一个函数传递给retryWhen在一个Observable ,我不能调用zipWith函数。 看来Kotlin正在等待一些不能在这里施展的东西。 在这个例子中, it.zipWith不起作用(一些其他方法可用,但不是这个): val retryFunc = Func1<Observable<out Throwable>, Observable<Any>> { // zipWith is not possible to call it.zipWith<Int, Any>(Observable.range(1, 3), Func2<Throwable, Int, Any> { throwable, integer -> if (integer > 2) { return@Func2 Observable.error<Any>(Exception()) } Observable.timer(1, TimeUnit.SECONDS) }) } Observable.just("1", "2", "3").retryWhen(retryFunc) 如果我将传入的参数更改为Func1<Observable<in Throwable> … ,则in关键字可以使用zipWith函数。 但是,我改变后,调用retryWhen(retryFunc)显示一个错误: 类型不匹配:期望Throwable Throwable,在Throwable中找到 val retryFunc = […]

Retrofit2和kotlin

我试图把Kotlin RxJava和retrofit2结合起来。 @GET("/xxxxxxxxxxxx/{id}.json") fun getHotel(@Part("id") id : String) : Observable<Response<Hotel>> 当我尝试调用这个方法(getHotels())时: var subscription = HotelsFactory.getHotelService((activity.applicationContext as App) .client) .getHotel(arguments.getInt("id").toString()) .subscribeOn(Schedulers.computation()) .observeOn(AndroidSchedulers.mainThread()) .subscribe({response -> showHotels(response)}) {throwable -> throwable.printStackTrace()} mSubscription.add(subscription) 我拿这个: @部分参数只能用于多部分编码。

Kotlin RxJava可空错误

我使用Kotlin和RxJava在我的Android应用程序中遇到了一个问题。 如下所示。 import rx.Observable data class TestUser(val name: String) fun getTestUser(): Observable<TestUser> { return Observable.just(TestUser("Brian")).flatMap { getUser() } // this compiles } fun getTestUser2(): Observable<TestUser> { val observable = Observable.just(TestUser("Brian")).flatMap { getUser() } return observable // this does not compile } fun getUser(): Observable<TestUser?> { return Observable.just(null) } 在getTestUser2 ,编译器推断最终的返回类型为Observable<TestUser?> ,并且不能编译。 然而,在getTestUser ,代码会进行编译,并且在运行时,当TestUser返回null时,该observable的任何订阅者可能会感到惊讶。 我猜这是在Kotlin和Java之间来回切换的。 但是,编译器可以看到getTestUser2的差异, […]