Tag: kotlin

在Kotlin编程语言中循环

在我的科特林代码,我得到types不匹配(推断types是INT,但布尔是预期的)错误。 fun main(args: Array) { var i = args.size while (i–){ println(args[i]) } }

如何在RxJava2中错误地终止开关图的序列

我正试图在RxJava2和Kotlin中实现一个刷新令牌流,并且在处理错误时遇到了问题。 有几个请求需要按顺序完成,但是如果有一些错误,顺序会有所不同。 基本上,如果我尝试使用我的刷新令牌并接收400 – Bad Request响应,因为令牌无效,我需要终止流并且不执行下一个switchMap (理想情况下,我想返回最终的Observable )。 但我不知道如何做到这一点。 如果我使用onErrorReturn ,我只是将返回的结果传递给下一个切换映射。 而doOnError只是在请求失败的时候执行这个步骤,但是整个序列还在继续。 fun refreshToken(): Observable { // try to use the refresh token to obtain an access token return authRepository.refreshToken(token) .switchMap { response -> // process response here userRepository.getUser() // fetch user details }.doOnError { // TODO – return final result, do not jump to […]

如何在Kotin中使用Anko设计SQLite表?

我在Kotlin中使用Anko设计了一个非常简单的表格,表格中有一个名为_id的主键,我希望_id是由SQLite系统自动传递的值。 我已经阅读了一些示例代码,但是我不知道哪一个是正确的,方法1,方法2还是方法3? 还有更多,当我插入一个记录时,我不认为我需要传递一个值给_id,但是MSetting和DBSetting的_id属性必须传递值,所以我必须用MSetting(10L,”My Settings”,2000L,”This is description!”)我不知道Anko如何处理不必要的_id,我很奇怪,当执行SettingManage().addSetting(MSetting(10L,”My Settings”,2000L,”This is description!”))时,应用程序不会崩溃SettingManage().addSetting(MSetting(10L,”My Settings”,2000L,”This is description!”))重复! 方法1:将 DBSettingTable._ID to INTEGER + PRIMARY_KEY+ UNIQUE, 方法2:将 DBSettingTable._ID to INTEGER + PRIMARY_KEY+ AUTOINCREMENT, 方法3: DBSettingTable._ID to INTEGER + PRIMARY_KEY, 插入数据 SettingManage().addSetting(MSetting(10L,”My Settings”,2000L,”This is description!”)) 设计表 class DBSettingHelper(mContext: Context = UIApp.instance) : ManagedSQLiteOpenHelper( mContext, DB_NAME, null, DB_VERSION) { companion object { val DB_NAME […]

如何获得Kotlin的KType?

我正在尝试Kotlin中的reflectionfunction,但似乎无法理解如何获取KType值。 假设我有一个将短语映射到对象工厂的类。 在不明确的情况下,用户可以提供一个type参数,将搜索范围缩小到仅返回该types对象(或某个子types)的工厂。 fun mapToFactory(phrase: Phrase, type: KType = Any::class): Any {…} type需要接受几乎任何东西,包括Int ,这从我的经验似乎有点特别对待。 默认情况下,它应该是Any东西,这意味着“不排除任何工厂”。 如何分配默认值(或任何值)来type ?

android.hardware.camera2全部在手机上时,但在模拟器上非常黑暗

任何想法为什么模拟器的摄像头(通过笔记本电脑摄像头路由)将工作,但手机的相机会产生完美的黑色照片? 我一直试图得到一个Kotlin你好,世界android.hardware.camera2应用程序的工作,需要高品质的照片按夜间天空摄影的时间表。 这是我第一次进入Android编程,我第一次使用android.hardware.camera2,所以我猜我错过了一些愚蠢的东西。 笔记本电脑摄像头拍摄非常黑暗的照片,但是当您手动照亮照片时,可以告诉他们正在工作。 但是,在设备(Pixel)上运行时,图片是纯黑色的。 我以为我把所有东西都设置为全自动模式 ,等待一秒钟就可以让相机对焦,但也许我需要在预览开始后等待一秒钟? 我最好的猜测是,没有一个实时预览窗口是不寻常的,它是搞砸了。

处理多个对象实例的最佳方法

部分原因是我不能在Kotlin中创建没有参数的数据类,所以我使用object s来处理这些情况,例如 sealed class Node { object Leaf : Node() data class Branch(val left:Node, val right:Node) : Node() } 问题是,有时候,我最终得到了Leaf类的多个实例。 显然这不应该普遍发生,但是在使用一些框架和一些测试用例序列化和反序列化时会发生这种情况。 现在,你可能会争辩说我应该修正这些情况,但是很难知道它们可能在哪里,而不总是可能或者不希望修改框架的反序列化语义。 因此,我希望我的object的所有实例的行为都是相同的值,就像无参数data class (或Scala中的无参数的case class )一样。 到目前为止,我的最佳解决方案是以下内容,包括在我创建的每个可能遇到此问题的对象中: object SaneLeaf { override fun hashCode() = javaClass.hashCode() override fun equals(other: Any?) = other?.javaClass == javaClass } 很明显,这是冗长而且容易出错的,因为把这些实现抽象到一个接口似乎是不可能的。 如果对象不需要扩展另一个类,那么超类就可以工作,但情况往往不是这样。 或者,我可以用Nothing参数创建一个数据类。 但是,这似乎更像是一个黑客。 别人怎么处理这个问题呢? 是否有计划添加hashCode和equals实现对象的假定这些类的语义(所有实例应该是相同/相同的hashCode)?

如何在RxJava 2和Android中延迟onError()?

我试图从我的应用程序中的Web服务器加载一些数据。 而且由于操作的异步性,无法预先知道需要多长时间才能完成。 为了提醒用户操作“正在进行”,我正在使用一个加载指示器。 这是一个使用kotlin和RxJava 2(我希望很清楚): fun loadData(){ showLoader() // show loading indicator Single.fromCallable { // http request logic goes here }.delay(1000, TimeUnit.MILLISECONDS) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribeWith(object : DisposableSingleObserver() { override fun onSuccess(data: String) { // do something hideLoader() // on success, hide indicator } override fun onError(e: Throwable) { displayErrorMessage() hideLoader() // on error hide indicator […]

Kotlin:创建扩展函数文件?加

我正在Kotlin开发一些库,我没有find这个解决方案, 我怎么能解决这个问题, 这是说,创建扩展functionFile?.plus ,在Java中它的工作正常,但在Kotlin如何写这个代码? 先谢谢你。

Anko的uiThread偶尔没有被解雇

我目前正在使用Anko的doAsync来处理异步任务。 具体来说,我用它来解析数据对象的ArrayList的响应json ,如下所示: // Asynchronously parse server response doAsync { val itemlist = parseResponse(response) uiThread { Otto.INSTANCE.post(UpdateRedeemedVoucherViewsEvent(itemlist)) } } 大多数情况下,就像在Google Pixel(Android 8.0.0)上一样 ,这个工作很好。 我的对象被解析,并且Otto总线事件将在ui线程上被延迟。 但在极少数情况下,这个过程失败了。 到目前为止,我注意到ui线程调用不会在Galaxy S5 Mini(Android 5.1.1)上被触发。 虽然我的数据没有任何错误或exception被解析, uiThread括号中的代码片段将不会被执行。 到目前为止,我无法确定这种行为的任何理由。 没有logcat日志,什么都没有。 这个错误将不会出现。 有没有人与kotlin和/或Anko有相同或相似的问题? 更新:我自己find了一个解决方案,请参阅下面的答案以获得解释。

循环依赖(Voronoi Halfedge)

我知道,“循环依赖是一个糟糕的设计”,但我认为在这种情况下是有保证的。 在构建voronoi图时,单元划分为所谓的“半边”,这使您可以方便地遍历图。 无论如何,为了实例化一个半边,我必须指定半边的镜子,或者双胞胎。 这是任何语言的时髦,但在Kotlin更令人讨厌,因为我不得不使用val而不是val,如我所愿。 现在我正在做这个我不喜欢的funkiness, val mirrorEdge: HalfEdge get() = halfEdge!! private var halfEdge: HalfEdge? = null fun setMirror(halfEdge: HalfEdge) { this.halfEdge = halfEdge } //别处 newEdge.setMirror(newEdge2) newEdge2.setMirror(newEdge) 半角镜像不能为空,应该是不变的,但是我不知道如何在代码中传达这个意图。