Tag: rx java2

JsonArray到Kotlin数据类使用Retrofit(期望的BEGIN_OBJECT,但是BEGIN_ARRAY)

我正在使用Retrofit2 fun create(): MyApiService { return Retrofit.Builder() .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .baseUrl(BASE_URL) .build() .create(MyApiService::class.java) } 隐式转换下面的Json [{ "id": 1, "name": "John", }, { "id": 2, "name": "Mary", } ] 转换成Kotlin数据类 object Model { data class Person(val id: Int, val name: String) } 但是,我正在尝试使用Expected BEGIN_OBJECT but was BEGIN_ARRAY错误 @GET("/people.json") fun getPeople() : Observable<Model.Person> 我试着改变Model对象从列表扩展(正如你通常在使用Java的改造1)或创建人的List字段,但无济于事。

Retrofit-Vertx在Kotlin中使用RxJava2 IllegalStateException消息== null

我用Vertex和RxJava 2(RxKotlin)在Kotlin上构建了一个非常简单的应用程序,使用Kovert REST框架和Retrofit。 我有retrofit-vertx适配器和RxJava2 Retrofit适配器。 我可以从我的listUndergroundStations()方法返回一个任意列表,但每当我尝试从远程API加载时,我得到以下错误: Jun 23, 2017 2:16:29 PM uk.amb85.rxweb.api.UndergroundRestController SEVERE: HTTP CODE 500 – /api/underground/stations – java.io.IOException: java.lang.IllegalStateException: message == null java.lang.RuntimeException: java.io.IOException: java.lang.IllegalStateException: message == null at io.reactivex.internal.util.ExceptionHelper.wrapOrThrow(ExceptionHelper.java:45) at io.reactivex.internal.observers.BlockingMultiObserver.blockingGet(BlockingMultiObserver.java:91) at io.reactivex.Single.blockingGet(Single.java:2148) at uk.amb85.rxweb.api.UndergroundRestController$listUndergroundStations$1.invoke(UndergroundRestController.kt:35) at uk.amb85.rxweb.api.UndergroundRestController$listUndergroundStations$1.invoke(UndergroundRestController.kt:13) at nl.komponents.kovenant.TaskPromise$wrapper$1.invoke(promises-jvm.kt:138) at nl.komponents.kovenant.TaskPromise$wrapper$1.invoke(promises-jvm.kt:130) at nl.komponents.kovenant.NonBlockingDispatcher$ThreadContext.run(dispatcher-jvm.kt:327) at java.lang.Thread.run(Thread.java:748) Caused by: java.io.IOException: java.lang.IllegalStateException: message == null […]

对于用作表达式的Kotlin函数,有没有简洁的方法来操作并返回一个值?

在Kotlin中,函数的最后一个语句可以被解释为它的返回值。 像下面的例子可以被简化为不太冗长吗? { text: String -> val validated = validateText(text) if (validated) { actOnValidation() } validated } 下面是一个使用RxJava的例子 – 即使有更好的Rx方法,我也会对纯Kotlin解决方案感兴趣。 fun inputChainObservable(targetField: TextView, chainedField: TextView): Observable<Boolean> { return targetField.textChanges() .observeOn(AndroidSchedulers.mainThread()) .map { cs: CharSequence? -> val hasInput = validateText(cs.toString()) if (hasInput) { chainedField.requestFocus() } hasInput } }

使用函数引用重写Kotlin中的Java代码会发生SAM类型冲突

我有一个示例Java代码使用方法引用,我想重写到Kotlin。 Java版本使用方法参考,解决方案简短明了。 但另一方面,我不能在Kotlin中使用方法引用。 我设法编写的唯一版本是下面介绍的一个。 看起来像Function3 { s: String, b: Boolean, i: Int -> combine(s, b, i) }可以用更简洁的方式编写(如果可能的话,方法引用将是完美的)。 我是Kotlin新手,所以我会感激任何线索。 Java的 import io.reactivex.Observable; public class TestJava { Observable<String> strings() { return Observable.just("test"); } Observable<Boolean> booleans() { return Observable.just(true); } Observable<Integer> integers() { return Observable.just(1); } void test() { Observable.combineLatest(strings(), booleans(), integers(), this::combine); } double combine(String s, boolean […]

Kotlin Android中的Observable无法从()运算符调用

我正在尝试使用kotlin来学习RxJava2,我正在关注这个很好的在线教程。 首先,我添加了这两行gradle.build文件: compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.1.3' 我试图用这个代码实现Observable模式: import io.reactivex.Observable class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val observable = Observable.from(arrayOf(1, 2, 3, 4, 5, 6)) } } 这应该很容易,但我不能从Observable(Unresolved reference:from)的()运算符调用。 所以基本上我在开始之前就卡住了。 有没有人知道我做错了什么?

使用Room + Kotlin时出现“无法合并dex”错误

我不是英语的母语用户。 请原谅我的拼写和语法错误。 我尝试用Kotlin实现Android架构的Room数据库接口。 在将Room引入到我的项目之后,应用程序发生构建错误。 Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'. > com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex 我在终端运行gradlew并得到以下错误信息: // from gradlew org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:63) at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88) at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54) at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197) […]

Rx-Kotlin awaitTerminalEvent永远不会完成

我想更好地了解如何使用Rx-Kotlin进行单元测试,但是我还没有能够成功地将主题设置为“完成”。 因此,我总是等待5秒的时间(onComplete应该立即),然后在assertComplete上失败。 我对awaitTerminalEvent的理解是,它应该只阻塞,直到onComplete被调用。 我也看了一下TestScheduler,但是我不认为应该在这里需要。 任何帮助或文件,可以带领我在正确的方向将不胜感激。 @Test fun testObservable() { val subject = BehaviorSubject.create<Int>() subject.onNext(0) TestSubscriber<Int>().apply { subject.subscribe({ System.out.println(it) subject.onNext(1) subject.onComplete() }) this.awaitTerminalEvent(5, TimeUnit.SECONDS) this.assertComplete() this.assertValue(1) } }

Java通用于Kotlin通用。 从方法返回泛型

尝试将项目从Java转换为Kotlin。 我被困在从RXJava 2返回ObservableTransformer的方法中 Java的 protected <T> ObservableTransformer<T, T> onNetworkError() { return observable -> observable .doOnError(throwable -> networkError.setValue(throwable)); } 转换这个使用intellij ide会引发错误。 Java到Kotlin使用ide protected fun <T> onNetworkError(): ObservableTransformer<T, T> { return { observable -> observable .doOnError({ throwable -> networkError.setValue(throwable) }) } } 有没有人有一个想法将上面的Java代码转换为Kotlin? 提前致谢

Kotlin构造函数参考泛型

我在(Rx)Java中有这样的代码: Observable.fromArray(1, 2, 3) .flatMap(this::intToBooleanObservable, Pair::new) ….. 我期望相应的Kotlin代码看起来像: Observable.fromArray(1, 2, 3) .flatMap(::intToBooleanObservable, ::Pair) ….. 然而,编译器不能推断Pair的通用类型,所以我现在可以做的最好的是: .flatMap(::intToBooleanObservable, { a, b -> a to b }) 这不像我希望的那样简洁。 有没有办法实现这一点,而不宣布变量a和b ?

将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 […]