Tag: kotlin

当重新创建Activity时,lateinit属性不会被初始化

在我的活动我有一个lateinit属性称为controller ,我的片段使用。 该属性在Activity.onCreate()初始化。 我的Fragment通过onAttach()获取其参考。 然后Fragment在Fragment.onCreate()调用myActivity.controller 。 通常controller首先在Activity.onCreate()初始化,然后添加Fragment 。 所以这工作得很好。 但是,当我的Activity被杀害,它试图重新创建自己和它的碎片。 这导致在Activity.onCreate()初始化之前调用Fragment.onCreate() Activity.onCreate() 。 这些是我现在看到的选项: 在super.onCreate()之前初始化controller (如果甚至可能的话) 将调用移动到myActivity.controller到更高的生命周期回调,如onViewCreated() 在Kotlin 1.2中有::controller.isInitialized 这里我最好的选择是什么?

Completable。Then Then result in“other is null”

我有以下代码: fun edit(note: Note): Completable = getValidationCompletable(note).andThen(repository.insertOrUpdate(note)) private fun getValidationCompletable(note: Note): Completable { return if (!note.isValidForEdit()) { Completable.error(IllegalArgumentException(“note failed validation before edit”)) } else { Completable.complete() } } 在note.isValidForEdit()返回false的情况下,我得到以下内容: java.lang.NullPointerException: other is null at io.reactivex.internal.functions.ObjectHelper.requireNonNull(ObjectHelper.java:39) at io.reactivex.Completable.concatWith(Completable.java:1040) at io.reactivex.Completable.andThen(Completable.java:908) 任何人都可以解释这一点吗?

Android室 – 简单的选择查询 – 无法访问主线程上的数据库

我正在试用Room Persistence Library的示例。 我创建了一个实体: @Entity public class Agent { @PrimaryKey public String guid; public String name; public String email; public String password; public String phone; public String licence; } 创建一个DAO类: @Dao public interface AgentDao { @Query(“SELECT COUNT(*) FROM Agent where email = :email OR phone = :phone OR licence = :licence”) int agentsCount(String email, String […]

将视图绑定到更改的控制器属性

我在TornadoFX图书馆工作在Kotlin。 想象一下你有一个工具栏,显示当前视图有用的工具。 所以我们有一个MainController,它有一个subController属性,它是工具栏旁边一些视图的控制器。 所以如果我们的子控制器改变,视图应该更新。 此外,如果子控制器的任何属性(例如selectedTool,tools)发生更改,则工具栏应相应更新。 暂时,工具栏不更新。 class ToolBar : View(“Tool bar”) { private val controller: MainController by inject() override val root = vbox { tilepane { for (tool in controller.subController.tools) { button(tool.name, group).action { controller.subController.changeTool(tool) // changes selected tool } } } this += controller.subController.selectedTool.options } } 额外的信息:subController.tools是一个ArrayList和subController.selectedTool是一个工具。 现在我的问题是,什么是在TornadoFX做这个建议的方式?

更新Recycler视图并为屏幕旋转创建可分区(这里最好的做法是什么?)

我一直在努力学习Kotlin两个月。 我在Kotlin做了一个Reddit应用程序,在Recycler View Grid Layout显示缩略图 将我的情况情景化 在MainActivity的apiCall方法中,我调用RedditAPI ,在其中使用RedditAPI进行网络调用,并根据ResultValue object class返回Observable然后,我在MainActivity检索对象,并将其显示在Recycler View ,这很有效。 但是,当我实现无限滚动,并有新的对象生成每次向下滚动时,我不得不将所有值添加到一个mutable list cumulativeValue ,更改我的适配器的结构,只是调用adapter.notifydatasetchange()滚动,也工作出来罚款。 private val cumulativeValues = mutableListOf() 然后在onscrolllistener redditAPI.callParameters(location, page, address.queryLimit, afterValue) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( { result -> cumulativeValues.addAll(result.data.children.toMutableList()) 我的代码工作,但我想实现屏幕旋转,现在我不知道我是否可以做到这一点parcelables,因为我把所有从网络调用检索到的值添加到一个可变的列表 我使用kotlin插件来实现parcelable类的另一个类, 这里有另一个类的RedditChildrenDetails作为参数,我也为这个类实现了parcelable(在同一个链接中)。 class RedditChildrenResponse(val data: RedditChildrenDetails) : Parcelable { … class RedditChildrenDetails( val url: String, val title: String, val thumbnail: String, […]

在ViewHolder中使用kotlin-android-extensions

class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { fun bindata(text: SingleText){ itemView.title.text = text.title itemView.desc.text = text.desc } } 像这样的代码,Kotlin在android扩展中有任何缓存? 当我反编译Kotlin字节码 public final void bindata(@NotNull SingleText text) { Intrinsics.checkParameterIsNotNull(text, “text”); ((AppCompatTextView)this.itemView.findViewById(id.title)).setText((CharSequence)text.getTitle()); ((AppCompatTextView)this.itemView.findViewById(id.desc)).setText((CharSequence)text.getDesc()); } 这意味着当我在Adapter.onBindViewHolder()中调用binData时,它会每次调用findViewById 这大大增加了性能的损失,并没有达到布局重用的目的 Kotlin在ViewHolder的android扩展中有任何缓存逻辑?

Android studio 3稳定版“房间1(RC)”的“app:kaptDebugKotlin”错误

编译我写在kotlin中的项目时,我仍然遇到这个错误: 错误:执行任务’:app:kaptDebugKotlin’失败。 内部编译器错误。 查看日志了解更多详情 有没有人有这个bug的解决方法或解决方案? 我已经看到了几乎所有围绕这个问题的答案,但是在这个级别上非常有用。 我应该补充说,项目工作正常,没有任何改变从gradle突然间,我得到了编译错误

NoClassDefFoundError使用Exposed时

我正在使用Exposed作为我的数据库库,当我尝试运行我的代码时遇到这些错误: Exception in thread “main” java.lang.NoClassDefFoundError: kotlin/reflect/full/KClasses at org.jetbrains.exposed.sql.Table.clone(Table.kt:196) at org.jetbrains.exposed.sql.Table.cloneWithAutoInc(Table.kt:234) at org.jetbrains.exposed.sql.Table.autoIncrement(Table.kt:238) at org.jetbrains.exposed.sql.Table.autoIncrement$default(Table.kt:238) at vanilla.jubeatbook.data.Songs.(SQLObjects.kt:14) at vanilla.jubeatbook.data.Songs.(SQLObjects.kt:13) at vanilla.jubeatbook.backend.MainKt$main$1.invoke(Main.kt:22) at vanilla.jubeatbook.backend.MainKt$main$1.invoke(Main.kt) at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.inTopLevelTransaction(ThreadLocalTransactionManager.kt:70) at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:58) at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:49) at vanilla.jubeatbook.backend.MainKt.main(Main.kt:21) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) Caused by: java.lang.ClassNotFoundException: kotlin.reflect.full.KClasses at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) … […]

我如何合并一个<List <List >>与RxJava 2的列表?

我想要做的就是敲一个终端来获得一个用户列表,返回Single<List> 。 接下来,我想抓住前三名用户,并击中另一个端点,以获取他们的所有postSingle<List> 。 最后,我想显示一个Toast ,其中前3个用户的post总数 。 我已经能够用Kotlin中的flatten()函数来实现它了。 不过,我想知道如何使用RxJava 2来做到这一点。可能吗? 谢谢。 … getPostsForFirstThreeUsers() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( { posts -> toast(“There are: ${posts.flatten().size} posts”) }, { ex -> Timber.e(ex, “there was an error processing the request”) } ) fun getFirstThreeUsers(): Flowable { return getAllUsers() .flattenAsFlowable { users -> users } .doOnNext { Timber.i(“a user: ${it.username}”) } […]

如何生成与dokka上载资料库的javadoc jar?

我最近迁移了一个java组件到kotlin。 到目前为止,当我使用Maven发布插件时,它也自动生成了javadoc,它也被上传到oss.sonatype.com。 另一方面,Dokka似乎并没有将发行版插件与开箱即可集成。 因此,在上传到oss.sonatype.com之后,nexus拒绝发布validation错误,因为javadoc jar缺失。 有没有与Maven发布插件的dokka集成?