anko 一个已经被抛弃的孩子

由于google爸爸现在主要的中心都放在flutter上,对于Android 原生sdk包括kotlin的库的更新,都已经不再那么关住了。由此导致的其他库如:anko,在新的Androidstudio上已经是bug重重,没有入坑的同学,直接放弃anko的使用,用第三方kotlin库尤其注意。

bug1: anko layout,看下面代码

 class LoginUI : AnkoComponent<LoginActivity> {
        private val customStyle = { v: Any ->
            when (v) {
                is Button -> v.textSize = 26f
                is EditText -> v.textSize = 24f
            }
        }

        override fun createView(ui: AnkoContext<LoginActivity>) = with(ui) {
            verticalLayout {
                padding = dip(32)

                imageView(android.R.drawable.ic_menu_manage).lparams {
                    margin = dip(16)
                    gravity = Gravity.CENTER
                }

                val name = editText {
                    hintResource = R.string.name
                }
                val password = editText {
                    hintResource = R.string.password
                    inputType = TYPE_CLASS_TEXT or TYPE_TEXT_VARIATION_PASSWORD
                }

                button("Log in") {
                    onClick {
                        ui.owner.tryLogin(ui, name.text, password.text)
                    }
                }

            }.applyRecursively(customStyle)
        }
复制代码

    java.lang.IllegalStateException: Module with the Main dispatcher had failed to initialize
        at kotlinx.coroutines.internal.MissingMainCoroutineDispatcher.missing(MainDispatchers.kt:79)
        at kotlinx.coroutines.internal.MissingMainCoroutineDispatcher.isDispatchNeeded(MainDispatchers.kt:54)
        at kotlinx.coroutines.DispatchedKt.resumeCancellable(Dispatched.kt:373)
        at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable(Cancellable.kt:25)
        at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:109)
        at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:160)
        at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:54)
        at kotlinx.coroutines.BuildersKt.launch(Unknown Source)
        at org.jetbrains.anko.sdk27.coroutines.Sdk27CoroutinesListenersWithCoroutinesKt$onClick$1.onClick(ListenersWithCoroutines.kt:299)
        at android.view.View.performClick(View.java:5265)
        at android.view.View$PerformClick.run(View.java:21534)
        at android.os.Handler.handleCallback(Handler.java:815)
        at android.os.Handler.dispatchMessage(Handler.java:104)
        at android.os.Looper.loop(Looper.java:207)
        at android.app.ActivityThread.main(ActivityThread.java:5728)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
     Caused by: java.lang.AbstractMethodError: abstract method "java.lang.String kotlinx.coroutines.internal.MainDispatcherFactory.hintOnError()"
        at kotlinx.coroutines.internal.MainDispatchersKt.tryCreateDispatcher(MainDispatchers.kt:39)
        at kotlinx.coroutines.internal.MainDispatcherLoader.loadMainDispatcher(MainDispatchers.kt:18)
        at kotlinx.coroutines.internal.MainDispatcherLoader.<clinit>(MainDispatchers.kt:10)
复制代码

是否页面很简介。但是!!

你会发现onclick事件会导致程序崩溃。 接着添加依赖,尝试添加依赖会发现该资源地址404 implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.2.0-alpha'

当然如果你的Androidstudio 版本是“3.1.2“或之前。不会报错。

另外,如果你想兼容java库,协程是不适合的。比如retrofit为主的请求框架,不支持主线程调用,而协程的大都是在主线程,避免子线程的开销。所以你只能依赖fuel,然而fuel你也会发现,不完全掌握kotlin语法的话,简单的请求回调,fuel不会教你怎么做的。要自己去封装。

转载于:https://juejin.im/post/5ca475df6fb9a05e7207ec4e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值