使用RxJava和Scheduler来更新Realm

我试图“rxify”我的数据库层是基于Realm .. 我有这个方法: public fun insertOrUpdate(user: user): User { return Observable.create { try { realm.beginTransaction() val result = realm.copyToRealmOrUpdate(user) realm.commitTransaction() it.onNext(result) it.onCompleted() } catch(e: Exception) { it.onError(IllegalDataAccess()) } } } 不过,由于我使用了不同的调度器,因此在不同的线程上使用领域对象的错误。 有什么要克服这个? (我能够做到这一点在对象检索,但不是在对象插入) (我正在使用kotlin btw。) 使用示例: userRepo.insertOrUpdateUser(user) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(…)

注入Platform Launcher创建的测试类

我以编程方式运行JUnit 5测试(Kotlin): LauncherFactory.create().execute( LauncherDiscoveryRequestBuilder .request() .selectors( DiscoverySelectors.selectClass(Sometest::class.java) ) .build(), SummaryGeneratingListener() ) 有没有办法挂钩到启动器的生命周期,以便在测试运行之前用测试类注入测试类? 我试图使用@ExtendWith ,但是然后我的TestInstancePostProcessor仍然由JUnit创建,而我需要一个链接到我原来的范围,从我执行Launcher 。

我可以调用API级别19中的Bundle#putString方法吗?

在API级别19的文档中 ,Bundle类中没有putString方法。 但是我可以调用Bundle#putString方法,我的应用程序工作正常。 我可以调用putString方法吗? 为什么我的应用程序工作正常? 环境: 由Kotlin编写代码 Android Studio 2.1.1 compileSdkVersion 24 buildToolsVersion 24.0.1 nminSdkVersion 17 targetSdkVersion 24

Kotlin的“@Parcelize”是否适用于非数据类?

我有简单的数据类。 我的意思是,他们是逻辑上的数据类,但不是data class ,因为我需要inheritance和其他构造函数。 他们只有字段(基本typesInt? , String?或List?等)和构造函数。 我需要通过他们(所有的领域需要通过)从活动到活动,所以我需要使他们parcellisable(或有更好的办法?)。 我首先创建它们作为data class ,只是添加@Parcelize 。 即使有一个警告和红线说“创造者”或什么的,我可以忽略他们和应用程序按预期工作。 但是,现在基于上述原因,我把它们改成了正常的类,突然间出现了编译错误。 Error:java.util.NoSuchElementException: Collection contains no element matching the predicate. at org.jetbrains.kotlin.android.parcel.ParcelableCodegenExtension.getPropertiesToSerialize(ParcelableCodegenExtension.kt:374) ….too long… at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Error:Execution failed for task ‘:app:kaptGenerateStubsDebugKotlin’. Internal compiler error. See log for more details 我怎么解决这个问题? 我应该使用data class吗? 但是我需要解析一个JSON对象来创建它们。 这些类看起来像这些(不是实际的类,但为简化说明)。 有没有更好的办法比手工实现那个无聊,庞大的可执行代码? @Parcelize open class Dog():Parcelable […]

无法导入AndroidJUnit4和ActivityTestRule

我试图做一个仪器测试的类。 这个类在androidTest文件夹app\src\androidTest\java\… 。 但是, AndroidJUnit4和ActivityTestRule无法解析。 在import语句中, import android.support.test.runner.AndroidJUnit4单词“runner”是红色的。 考试class在Kotlin。 我试图删除它,并在Java中创建一个,但仍不能导入AdnroidJUnit4。 我读了一些类似的问题,但没有find解决我的情况。 这两个是项目和应用程序build.gradle文件:我的gradle文件有什么问题吗? 应用程序build.gradle: apply plugin: ‘com.android.application’ apply plugin: ‘kotlin-android’ apply plugin: ‘kotlin-kapt’ android { compileSdkVersion rootProject.ext.compileSdkVersion defaultConfig { applicationId “com.sample.me” minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName “1.0” archivesBaseName = “$applicationId-$versionName-$versionCode” testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner” // For room compat multiDexEnabled true javaCompileOptions { annotationProcessorOptions { arguments = […]

javac是否会生成静态桥接方法?

Java中使用Bridge方法来处理派生方法中的协方差,并更改派生方法的可见性。 然而,这两种情况都是例如方法(因为你不能派生静态方法)。 我正在研究Kotlin如何生成参数默认值,我感到震惊,它使用静态桥接方法。 我想不出Javac产生静态桥接方法的情况 – 其他人可以吗? (通过这个,我的意思是一个ACC_BRIDGE标志(0x40)被设置的方法,而不仅仅是一个语义上的桥接方法) (fwiw – 示例代码和反编译(使用cfr 0_124和–hidebridgemethods为false)) 方差 public class BridgeTest1Base { public T frob() { return null; } } public class BridgeTest1Derived extends BridgeTest1Base { public Integer frob() { return null; } } 反编译 public class BridgeTest1Derived extends BridgeTest1Base { @Override public Integer frob() { return null; } @Override public […]

Kotlin – 如何创建RxJava flatmap()的别名函数?

我试图创建一个别名函数Flowable.flatmap()如下,但编译错误。 fun Flowable.then(mapper: Function<T, Publisher>): Flowable { return flatMap(mapper) } 错误是: 在kotlin中定义的接口Function有一个types参数 有什么想法? 谢谢!

当使用Maven编译时,类路径条目指向一个不存在的位置警告

我们最近从Kotlin 1.1.51升级到1.2.10,清除了所有警告(我们使用“错误”将警告视为错误),并且项目正在运行。 我们使用mvn verify命令从命令行构建它,以及使用Build > Build project从IntelliJ Build > Build project 。 然后,我们决定升级到最新版本(1.2.21),这里是我们看到的一些问题:从命令行( mvn verify )编译项目时出现警告,导致编译失败: [警告]类路径条目指向一个不存在的位置:/用户/用户名/ git /项目名称/目标/类 有意思的是,如果我们在IntelliJ上执行Build > Build Project ,那么就没有任何警告,并且项目将编译(并运行)而没有问题。 如果我们将Kotlin的版本降级到pom文件(而不是1.2.21)上的1.2.10,则它将再次从命令行和IntelliJ Build中成功建立。 我们注意到当我们执行Build> Build Project时,在目标文件夹中创建了两个目录:classes和test-classes; 而当命令行编译失败时,有两个不同的目录:kotlin-ic和maven-status。 我看到似乎相关的问题( 1,2或3 ),但是它们的错误/警告似乎是特定于某些库的,而在这种情况下,它看起来像更一般的东西(它不是一个特定的库,我可以像建议的那样添加为依赖项在答案)。 为什么命令行和IntelliJ版本之间的区别? 是什么引发了这个警告,我们该如何解决?

调用Rooms inMemoryBuilder方法时,Room Persistence Library运行时exception

当遵循设置Room持久性库的教程时,我在Android设备上测试时遇到此错误。 java.lang.RuntimeException:找不到PackageName .AppDatabase的实现。 AppDatabase_Impl不存在 我知道有一个类似的问题,但问题是由于kotlin gradle问题。 可能重复 测试课: @RunWith(AndroidJUnit4.class) public class LocalDatabaseTest { private PhotoDao mPhotoDao; private AppDatabase mDb; @Before public void createDb() { Context context = InstrumentationRegistry.getTargetContext(); mDb = Room.inMemoryDatabaseBuilder(context.getApplicationContext(), AppDatabase.class).build(); mPhotoDao = mDb.photoDao(); } @After public void closeDb() throws IOException { //mDb.close(); } @Test public void testPreConditions() { assertNotNull(mDb); } 道: @Dao public […]

RestAssured-身体中的对象抛出错误

我通过测试的对象 @Data public class UserRequest { @JsonProperty(“name”) private final String name; @JsonProperty(“surname”) private final String surname; @JsonProperty(“email”) private final String email; @JsonProperty(“iaAdmin”) private final boolean isAdmin; } 比我有它测试 @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class UserControllerIT { @LocalServerPort private int port; @Test public void testIsCreatingNewUser() throws IOException{ given() .when() .body(new UserRequest(“asd”,”sad”,”asd”,false))//.body(TestGenerator.getUserRequest()) .port(port) .post(“/user/” + TestGenerator.randomUUID) .then() […]