Tag: kotlin

FIRESTORE持久性数据

谈论火灾持久性数据,让我们假设用户在第一次启动应用程序时没有任何连接。 我添加一些数据到Firestore数据库(如userID ..),我可以用get()方法取回它。 现在用户关闭应用程序。 下一次,他将打开应用程序(仍然没有连接),他将能够检索以前存储的数据,就像它被存储在sharedprefs的方式? 我不能清楚地弄清楚如何find一个合适的方法来建立一个永久数据的初始阶段。 我有几个片段。 每次启动其中一个时,我使用“onResume”方法从数据中填充我的组件(先前存储在sharedpref中)。 当我设置Firestore getData时,需要时间来检索。 因此,如果用户从当前片段更改为另一个,那么当连接为ON时,在数据库结果完成时,组件有空或无法访问的错误。 实施这种“onResume”数据再填充的最佳方式是什么? 更新: 以下是一些代码: MainAvtivity .kt FirebaseFirestore.getInstance().firestoreSettings.isPersistenceEnabled sightingsDatabase = FirebaseFirestore.getInstance() docname=FireStoreSetup().setupFB(sightingsDatabase!!,this) 一个kotlin对象类来填充我的文档: data class Sighting(var userID: String, var sig_wit_situation_type: Int, var sig_env_background_type: Int, var sig_ground_type: Int, var sig_YYYY: String, var sig_MM: String, var sig_DD: String, var sig_time_start: String, var sig_date_time: String, var sig_duration_hms: String, var […]

运行多个测试(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 { […]

Android室错误:types转换器无法识别列表的枚举

房间库不识别我为枚举List创建的TypeConverter 。 但是,当我将其更改为枚举的ArrayList它工作正常。 任何人有任何想法,为什么和我能做些什么来使这个工作与List ? (在Kotlin中使用列表更容易,我真的不希望只是因为这个原因转换回ArrayList )。 这是我的代码: 我的模特: @Entity data class Example(@PrimaryKey val id: String?, val name: String, var days: List?) DayOfWeek是一个枚举: enum class DayOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY; val value: Int get() = ordinal + 1 companion object { private val ENUMS = DayOfWeek.values() fun of(dayOfWeek: Int): DayOfWeek { […]

错误:执行任务’:app:clean’失败。 无法删除文件

我试图重建我的Android Studio Gradle项目(主要包含Kotlin代码),但在清理/重建过程中,它开始抛出UnableToDeleteFileException : Execution failed for task ‘:app:clean’. > Unable to delete file: C:\Users\User\KotlinGameEngine\app\build\intermediates\exploded-aar\com.android.support\appcompat-v7\23.0.1\jars\classes.jar 我试图改变我的项目的包结构后,开始发生。 不幸的是,我通过重命名和移动源文件夹,而不是通过Android Studio重构,这是一个坏主意。 我一直在寻找这个问题的解决办法,而这些都是我试图无效的东西: 做一个Gradle同步; 重新安装Java JRE和Java SDK; 重新安装最新版本的Android Studio(1.4); 回滚到以前的AS版本(1.3); 使AS缓存无效并重新启动; 删除项目目录中的gradle和.gradle目录; 删除我的用户目录中的.gradle目录; 从AS终端运行gradlew clean ; 手动将源代码复制到一个新项目(奇怪的是,它在某些项目中持续存在) 我已经尝试了一些成功的事情,但只能让我再次执行一次干净的重建,然后再次发生错误: 关闭AS,手动删除构建文件并再次打开它; 当AS正在运行时,会杀死java.exe进程(这在技术上可以每次都完成,但是这很枯燥,并且会降低构建过程的速度) 所以看起来,编译Java进程可能会因为某种原因而对构建文件进行锁定,但这也可能与Kotlin有关。 我有一个(更成熟的)我正在处理的Java Android项目,虽然我不能在清理时重现此错误。 这似乎只发生在我的Kotlin项目上。 有任何想法吗? 提前致谢。 更新: 我发现问题是由Kotlin Android插件引起的。 当我从模块的build.gradle文件中删除apply plugin: ‘kotlin-android’时,问题就消失了,当我重新插入时,它会回来。 随时提供任何洞察到这一点。 更新2: 最后的更新不是原因。 我发现如果一个项目包含一个Kotlin文件,那么重建和清理失败。 即使所有Kotlin文件都被删除,它仍然会失败,直到后台Java进程被终止,这意味着它在构建文件上有某种锁定。 我在这里提交了一个bug,更多的细节和步骤来重现错误: KT-9440

科特林。 如何检查是否可以通过reflection字段?

我正在开发一个代码生成器,在运行时从类中获取数据。 该发生器只能与Kotlin一起使用。 目前,我正面临着这个问题,因为我不知道如何检查该字段是否可以空。 所以主要问题是如何通过reflection来实现这个检查?

错误“不能为null”在Kotlin中

有一个.zip文件中有多个文件,我正在尝试获取。 试图解压缩文件提供了一个java.lang.IllegalStateException:zis.nextEntry不能为null。 如何正确地做到这一点? @Throws(IOException::class) fun unzip(zipFile: File, targetDirectory: File) { val zis = ZipInputStream( BufferedInputStream(FileInputStream(zipFile))) try { var ze: ZipEntry var count: Int val buffer = ByteArray(8192) ze = zis.nextEntry while (ze != null) { val file = File(targetDirectory, ze.name) val dir = if (ze.isDirectory) file else file.parentFile if (!dir.isDirectory && !dir.mkdirs()) throw FileNotFoundException(“Failed to […]

Angular:如何在表单提交中发布文件到服务器

我有一个表单被张贴到我的后端(Kotlin,Spring Web)。 这个表格有一些文字输入,而且这个post完美无瑕。 但是当我添加一个文件输入时,该post停止工作,返回以下错误: {status: 400, error: “Bad Request”,…} error: “Bad Request” exception: “org.springframework.http.converter.HttpMessageNotReadableException” message: “Could not read document: No suitable constructor found for type [simple type, class com.test.InsertConfigCommand]: can not instantiate from JSON object (missing default constructor or creator, or perhaps need to add/enable type information?)↵ at [Source: java.io.PushbackInputStream@2cb43211; line: 1, column: 2]; nested […]

permissionsdispatcher和多个@ NeedsPermission与kotlin

对于一个权限,我可以在java和kotlin中使用permissionsdispatcher – 但是当涉及到像这样的多个权限时: @NeedsPermission({Manifest.permission.BLUETOOTH_ADMIN,Manifest.permission.BLUETOOTH}) 我在kotlin上遇到一个问题 – 它不能接受多个参数 – 可以和java一起工作

如何在android中将方法调用注入到另一个方法中

我有一个class, 一个叫something的领域, 一个名为setSomething的setter方法, 一个叫做onChange的方法,每次改变时都应该调用它。 我希望能够自由地添加更多的领域,并为他们所有人都有相同的行为。 我不想手动调用onChange因为, 很多样板, 代码将被写入Kotlin,所以我不想编写setter函数。 我已经能够想到的理想解决方案是在编译时每个setter方法的return之前以某种方式注入onChange调用。 我已经看过注释处理,但是显然类并不是真的在那个阶段编译的,所以我不得不重新生成整个类。 我不完全明白这一点。 另一个选项似乎是编写一个gradle插件,它将find相关的类并修改它们的字节码。 实际上,我已经开始将它作为一个纯Java项目(gradle插件是半完成的),并且已经能够find类并注入方法调用。 虽然似乎无法成功地将结果写入类文件。 这是我的(使用BCEL ): public class StateStoreInjector { public static void main(String[] args) { // Find all classes that extends StateStore Reflections reflections = new Reflections(“tr.xip.statestore”); Set<Class> classes = reflections.getSubTypesOf(StateStore.class); for (Class c : classes) { try { JavaClass clazz = Repository.lookupClass(c.getName()); JavaClass […]

Kotlin可为空的variables赋值

在Kotlin中,这个代码是否有更简短的语法: if(swipeView == null){ swipeView = view.find(R.id.swipeableView) } 首先我试过这个: swipeView ?: view.find(R.id.swipeableView) 但后来我意识到这不是一个任务,所以代码什么都不做。 然后我试着: swipeView = swipeView ?: view.find(R.id.swipeableView) 哪个工作,但有点冗长。 我会期待这样的事情: swipeView ?= view.find 但不幸的是,这是行不通的。 有没有什么办法用一个简短的语法来完成这个? 我知道我可以这样做: variable?.let { it = something } which works.