Tag: RX java

运行多个测试(Kotlin)时,只有第一个测试通过TestScheduler,

我试图在Kotlin中使用RxJava在MVP体系结构中测试我的演示者。 我已经创建了一个测试规则,用TestScheduler替换通常的调度程序来测试异步请求: class TestSchedulerRule : TestRule { val testScheduler = TestScheduler() override fun apply(base: Statement, d: Description): Statement { return object : Statement() { @Throws(Throwable::class) override fun evaluate() { RxJavaPlugins.setInitIoSchedulerHandler { testScheduler } RxJavaPlugins.setInitComputationSchedulerHandler { testScheduler } RxJavaPlugins.setInitNewThreadSchedulerHandler { testScheduler } RxJavaPlugins.setInitSingleSchedulerHandler { testScheduler } RxAndroidPlugins.setInitMainThreadSchedulerHandler { testScheduler } try { base.evaluate() } finally { […]

Kotlin泛型方法和继承

在我的代码中,我想在抽象类中创建一个方法,该方法返回一些Observable。 然后这个抽象类的实现将返回某些(指定)类型的Observable。 不幸的是,Android Studio会在实现方法()中返回一个错误“类型不匹配”: 预计:可观察 找到:Observable <{package} .DrawerItemEntity> 我的MockDrawerList.getList()返回Observable<DrawerItemEntity> 请关注execute()和buildUseCaseObservable 抽象类 public abstract class UseCase(threadExecutor: ThreadExecutor, postExecutionThread: PostExecutionThread) { private val threadExecutor: ThreadExecutor private val postExecutionThread: PostExecutionThread private var subscription: Subscription = Subscriptions.empty() init { this.postExecutionThread = postExecutionThread this.threadExecutor = threadExecutor } protected abstract fun buildUseCaseObservable(): Observable<Any> public fun execute(useCaseSubsriber: Subscriber<Any>) { subscription = buildUseCaseObservable() […]

RxJava和FasterXML有一个有效的proguard规则吗?

现在阻止我在生产中使用kotlin的唯一问题是我找不到一个正确的proguard文件。 我用什么: 1.Kotlin 2.Anko 3.Jackson-科特林模块 以下是警告消息: :app:proguardRelease Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can't find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry Warning: rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef: can't find referenced class sun.misc.Unsafe Warning: rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef: can't find referenced class sun.misc.Unsafe Warning: rx.internal.util.unsafe.ConcurrentCircularArrayQueue: can't find referenced class sun.misc.Unsafe Warning: rx.internal.util.unsafe.ConcurrentSequencedCircularArrayQueue: can't find referenced class sun.misc.Unsafe Warning: rx.internal.util.unsafe.MpmcArrayQueueConsumerField: can't find referenced class sun.misc.Unsafe Warning: rx.internal.util.unsafe.MpmcArrayQueueProducerField: can't find referenced class […]

将传递lambda到Observable.subscribe in kotlin导致内存泄漏?

请参阅以下kotlin代码: class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { val disposable = Observable.interval(1, TimeUnit.SECONDS, AndroidSchedulers.mainThread()) .subscribe { textView.text = it.toString } } } 在这里,我正在传递一个lambda表达式,而不是一个匿名的内部类。 那么是否需要调用disposable.dispose()以防止内存泄漏? 或者,lambda表达式不会保留对MainActivity类的实例的隐式引用。 如果我确实需要处理它,那么最好的方法是什么?为什么?

RxJava 2需要与RxJava 1(Kotlin)不同的Observable返回类型

我正在更新我的项目从RxJava 1到RxJava 2.我有这个扩展方法(我使用Kotlin): fun <T : DatabaseModel> Observable<DataSnapshot?>.toObjectObservable(type: Class<T>): Observable<T> { return this.map { if (it == null) { return@map null } val data = it.getValue(type) data?.setId(it.key) data } } 当我使用RxJava 1时,一切都很好。 但是,当我用RxJava 2(io.reactivex.Observable)中的新Observable替换了observable时,发生了错误。 现在IDE说它需要下面的返回类型: ((Datasnashot) -> T)! 而不是提供 (Datasnapshot) -> T? 你有什么想法可能会导致这种不同的行为? 我应该如何改变代码来修复它?

使用Kotlin的RxJava – 如何同步2个异步方法,从Java重构

我有2个集合,哪个缓冲区位置更新事件: private List<LocationGeoEvent> mUpdateGeoEvents = new ArrayList<>(); private List<LocationRSSIEvent> mUpdateRSSIEvents = new ArrayList<>(); 在我的代码中也有: private final ScheduledExecutorService mSaveDataExecutor = Executors.newSingleThreadScheduledExecutor(); private boolean mSaveDataScheduled; private final Object mEventsMonitor = new Object(); private ScheduledFuture<?> mScheduledStopLocationUpdatesFuture; private final ScheduledExecutorService mStopLocationUpdatesExecutor = Executors.newSingleThreadScheduledExecutor(); 我添加这样的事件: public void appendGeoEvent(LocationGeoEvent event) { synchronized (mEventsMonitor) { mUpdateGeoEvents.add(event); scheduleSaveEvents(); } } RSSI事件也是如此 现在,scheduleSaveEvents方法如下所示: private […]

我可以创建一个将rxJava订阅添加到CompositeSubscription的Kotlin扩展方法吗?

我一直在玩Kotlin / RxJava,并试图创建一个扩展方法来将订阅添加到CompositeSubscription,这将工作如下: search.subscribe { //do stuff }.addToComposite(compositeSubscription) 这是我迄今的尝试: fun Subscription.addToComposite(composite: CompositeSubscription) = { composite.add(this) } 它编译和运行没有错误,但似乎并没有实际将订阅添加到CompositeSubscription。 我做错了什么?

Moshi的定制适配器与RxAndroid&Retrofit&Kotlin

在为Android项目配置Kotlin之后,我写了一个简单的MainActivity.kt 。 它调用Retrofit来获取包含以下数据的JSON文件: { “消息”:“成功”, “user”:{ “用户名”:“Eric” } } 现在我想用Moshi把JSON数据转换成Kotlin类,所以这里有两个类来反映上面的JSON结构: class User(var username:String) UserJson类(var消息:字符串,var用户:用户) 而Moshi的自定义类型适配器: 类UserAdapter { @FromJson fun fromJson(userJson:UserJson):User { Log.d(“MyLog”,“message = $ {userJson.message}”)// =成功 Log.d(“MyLog”,“user = $ {userJson.user}”)// = null 返回userJson.user } } 当它进入函数从fromJson() , userJson.message = "success"的预期。 但奇怪的是, userJson.user是null ,这应该是User(username="Eric") 。 我是Moshi和Kotlin的新手,我已经坚持了这个问题约10个小时。 请帮我一下 感谢您的帮助。 ======================================== 以下是MainActivity.kt的完整代码(仅限50行): class MainActivity:AppCompatActivity(){ 重写fun onCreate(savedInstanceState:Bundle?){ super.onCreate(savedInstanceState) 的setContentView(R.layout.activity_main) […]

对于用作表达式的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,翻新和RXjava来填充列表视图

我与服务的整合已经准备就绪,我可以在请求日志中看到我的数组,但是我无法填充列表视图。 我真的已经尝试了我所知道的一切,我对kotlin是新的,语言让我有点困惑。 有人可以找出错误的地方,我做错了。 JSON /请求: {"0":{"id":1,"nome":"teste"},"1":{"id":2,"nome":"teste 2"}} apiClient.kt val service : ApiInterface val URL = "json" init { val logging = HttpLoggingInterceptor() logging.level = HttpLoggingInterceptor.Level.BODY val httpClient = OkHttpClient.Builder() httpClient.addInterceptor(logging) val gson = GsonBuilder().setLenient().create() val retrofit = Retrofit.Builder() .baseUrl(URL) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create(gson)) .client(httpClient.build()) .build() service = retrofit.create<ApiInterface>(ApiInterface::class.java) } ApiInterface.kt @Headers("Accept: application/json") @GET("/request") fun getInstituicoes(): Observable<Instituicao> Instituicao.kt(实体) […]