Questions tagged «kotlin»

Kotlin是JetBrains支持的一种开源静态类型编程语言。Kotlin结合了OOP和功能特性,并专注于互操作性,安全性,清晰度和工具支持。它目前针对JVM和JavaScript,并且是Android上官方支持的语言。

5
Kotlin协程如何比RxKotlin更好?
我为什么要使用Kotlin的协程? 看来RxKotlin库具有更多的用途。与之相比,Kotlin的协程看起来强大得多,使用起来也比较麻烦。 我基于协程的观点基于Andrey Breslav(JetBrains)的设计演讲 演讲幻灯片可在此处访问。 编辑(感谢@hotkey): 在此可以更好地了解协程的当前状态。
71 kotlin  rx-kotlin 


4
Kotlin没有看到Java Lombok访问器?
使用Kotlin 1.0.0版本(在IntelliJ 15中编译)。 println(myPojoInstance.foo) 当它尝试编译引用基于Lombok的POJO的代码(在IntelliJ或Gradle中)时,出现错误“无法访问'foo':在“ MyPojo”中为'private'。是的,它们都是私有的,而我的对象有@Value @Builder用于lombok批注。 我尝试过专门调用getFoo(),但是它说“ getFoo的未解析引用”。也许有一些技巧可以使Kotlin知道如何处理lombok注释?
71 kotlin  lombok  println 

5
传递lambda而不是接口
我创建了一个界面: interface ProgressListener { fun transferred(bytesUploaded: Long) } 但只能将其用作匿名类,不能用作lambda dataManager.createAndSubmitSendIt(title, message, object : ProgressListener { override fun transferred(bytesUploaded: Long) { System.out.println(bytesUploaded.toString()) } }) 我认为应该可以用lambda代替它: dataManager.createAndSubmitSendIt(title, message, {System.out.println(it.toString())}) 但是我得到了错误: Type mismatch; required - ProgressListener, found - () -> Unit? 我究竟做错了什么?
69 lambda  kotlin 




3
Kotlin Flow与Android LiveData
我对Kotlin Flow有一些疑问 我可以从多个片段观察LiveData。我可以用Flow做到这一点吗?如果是,那怎么办? 我们可以使用map&从单个LiveData获得多个LiveData switchMap。有没有办法从一个源流获得多个流? 使用,MutableLiveData我可以使用变量引用从任何地方更新数据。有什么办法可以对Flow进行同样的操作? 我有一个用例这样的:我会观察SharedPreferences使用callbackFlow{...},这将给我一个单一源流。从该流中,我想为每个键值对创建多个流。 这些听起来很愚蠢。我是Rx and Flow世界的新手。


2
启用safe-args插件后无法从数据绑定获取根视图
我正在使用dataBinding开发一个Android应用程序,当前正在尝试添加safe-args插件,但是启用该插件后,我无法再通过binding.root获取根视图-Android Studio给出错误: Unresolved Reference None of the following candidates is applicable because of a receiver type mismatch: * internal val File.root: File defined in kotlin.io 如何获得数据绑定和safe-arg一起玩的好习惯? 请注意,当代码片段位于Kotlin中时,我将很高兴获得Java答案。不太熟悉Java,但是我可以轻松阅读和翻译它。 我无法通过谷歌搜索错误消息和“安全参数”来找到其他遇到相同问题的人。我首先尝试使用以下Android文档中列出的类路径:https : //developer.android.com/guide/navigation/navigation-pass-data classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.1.0" 然后还找到了一个建议我使用的教程: classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-alpha07" 两者都有相同的问题:binding.root在激活插件时出现错误 这是我的片段的onCreateView()。当未启用safe-args时,该返回行正常工作,而在启用后则不起作用 override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { binding …

1
Navigation Arch Component会造成假阳性内存泄漏吗?
我对内存泄漏以及可能导致它们的原因有基本的了解。这就是为什么我不明白我的代码中是否有问题还是误报的原因。我不知道我应该共享代码的哪一部分,因为该项目并不小。但是,请在评论中让我知道,然后我将添加所需的代码。 我使用导航拱形组件并遵循MVVM模式。我在项目开发的后期添加了LeakCanary库,当我在屏幕之间导航时,它立即开始向我发出有关保留实例的警告。 当我将片段添加到后堆栈时,会发生问题。随着向后堆栈中添加的每个片段,保留实例的计数器增加。当达到阈值5时,LeakCanary将转储堆并提供报告。 但是,如果我单击“后退”按钮并返回到先前的屏幕,则保留实例的计数器减少,最终,当返回到第一个屏幕时,所有保留的实例都会消失。 如果我查看堆分析报告,它表示变量coordinatorLayout是CoordinatorLayoutxml中的引用。如果删除该变量及其所有用法,然后再次运行该应用程序,我会看到相同的问题,但是现在有了另一个变量,该变量引用了xml中的另一个视图。我试图删除LeakCanary报告为泄漏的所有视图及其用法。当它说a TextView只是用于设置文本onViewCreated而不在其他地方使用时,正在泄漏,我开始怀疑我的代码是否有问题。 我分析了片段中的生命周期方法调用,并注意到当我导航到先前片段的新屏幕时,直到(包括)所有方法onDestroyView都被调用,但没有被调用onDestroy。当我单击返回时,onDestroy将调用位于后堆栈顶部和保留实例顶部的片段,计数器会减少。 我怀疑导航组件在返回堆栈中时会保留片段的实例,而LeakCanary却将其视为泄漏。


1
Android Q:范围存储中的SQLite数据库
在Android Q中引入了新的范围存储功能,该功能表示: 默认情况下,面向Android 10(API级别29)及更高版本的应用会获得对外部存储(或范围存储)的范围内访问权限。此类应用程序只能访问外部存储上特定于应用程序的目录以及该应用程序创建的特定媒体类型。 我有我的应用程序在外部存储上创建SQLite数据库,这样,当应用程序卸载数据库时,该数据库仍然有效,以后可以用作恢复功能,也可以在Android设备之外使用(例如在PC中) 如何使用Android Q达到相同的效果?更准确地说,如果数据库存储在外部公共目录中,如何使用标准读取此数据库SQLiteOpenHelper?

1
我们如何在Java注释声明中引用Kotlin常数?
鉴于Kotlin的这一点: object OldTownRoad { const val COWBOY_HATS = "from Gucci" const val WRANGLER = "on my booty" } 和这个Java类: public class Scrap { @Named(OldTownRoad.COWBOY_HATS) public void lilNasXrefs() { System.out.println(OldTownRoad.COWBOY_HATS); System.out.println(OldTownRoad.WRANGLER); } } 编译器对println()调用感到满意。它抱怨COWBOY_HATS在@Named批注中使用,说“属性值必须恒定”,如以下Android Studio 3.5.3屏幕截图所示: 我试着@JvmStatic和@JvmField这些const val声明,但是编译器会抱怨,无论是有效的const属性。 我从中得到了相同的结果companion object: class OldTownRoad { companion object { const val COWBOY_HATS = "from …
13 kotlin 

3
withTimeout函数提供IllegalStateException:没有事件循环。使用runBlocking {…}启动一个。在Kotlin Multiplatform iOS客户端中
更新:如果我先执行没有超时的协程,然后执行withTimeout,它将起作用。但是,如果我先用timeout执行协程,则会给我一个错误。异步也是如此。 我正在创建一个演示kotlin跨平台应用程序,并在其中使用ktor执行API调用。我想在ktor请求上具有可配置的超时功能,所以我在协程级别使用withTimeout。 这是我使用网络API进行的函数调用。 suspend fun <T> onNetworkWithTimeOut( url: String, timeoutInMillis: Long, block: suspend CoroutineScope.() -> Any): T { return withTimeout(timeoutInMillis) { withContext(dispatchers.io, block) } as T } suspend fun <T> onNetworkWithoutTimeOut(url: String, block: suspend CoroutineScope.() -> Any): T { return withContext(dispatchers.io, block) as T } 这是我的iOSMain模块的AppDispatcher类。 @InternalCoroutinesApi actual class AppDispatchersImpl …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.