kotlin下 “android.os.NetworkOnMainThreadException” 或 “Only the original thread that created a view hierarchy can touch its views” 解决

 开发  kotlin下 “android.os.NetworkOnMainThreadException” 或 “Only the original thread that created a view hierarchy can touch its views” 解决已关闭评论
9月 272020
 

kotlin下使用协程时,出现错误提示android.os.NetworkOnMainThreadException 或 Only the original thread that created a view hierarchy can touch its views, 可以使用下面的方法解决:

 

1. 使用协程需build.gradle先加入

dependencies {

implementation “org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9”
}

 

2.  套用下面的模版:

GlobalScope.launch {
    //TODO("Background processing...")
    withContext(Dispatchers.Main) {
        // TODO("Update UI here!")
    }
    TODO("Continue background processing...")
}

kotlin下泛型使用中in / out 区别

 kotlin  kotlin下泛型使用中in / out 区别已关闭评论
9月 242020
 

在看kotlin泛型资料时,对于使用in或out看得很头大:

  1. 根据需要,泛型参数可以扮演两种角色:生产者(producer)-> out 或消费者(consumer)-> in。生产者角色就意味着泛型参数可读而不可写;消费者角色则相反,可写而不可读。out关键字表明,泛型参数将扮演可读而不可写的生产者角色。也就是说,不能再用var关键字,需要改用val.
  2. 顺便说一下,你可能听到有人用协变(covariance)和逆变(contravariance)来描述outin的用处。

 

最终总结下其实如何使用就是:

  • 父类泛型对象可以赋值给子类泛型对象,用 in;
  • 子类泛型对象可以赋值给父类泛型对象,用 out。

Done!!