这次碰到的是这个异常,记录如下:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xianglin.app/com.xianglin.app.biz.chat.groupsetting.scangroup.ScanGroupActivity}: kotlin.UninitializedPropertyAccessException: lateinit property view has not been initialized
║ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2655)
原因很简单,采用lateinit标记属性时未初始化。lateinit是防止出现空的。代码如下:
class ScanGroupPresenter(scanGroupFragment: ScanGroupFragment) : ScanGroupContract.Present {
// private var view: ScanGroupContract.View ?= null //允许为空
private lateinit var view :ScanGroupContract.View //非空如何初始化
init {
// if (view == null) return
this.view = view
view.setPresenter(this)
}
在这个类的构造函数进行赋值,在其它地方调用 ScanGroupPresenter(scanGroupFragment) 所以就出错了。
修改后:
class ScanGroupPresenter(scanGroupFragment: ScanGroupFragment) : ScanGroupContract.Present { // private var view: ScanGroupContract.View ?= null //允许为空 private var view :ScanGroupContract.View = scanGroupFragment //非空如何初始化 init { // if (view == null) return // this.view = view view.setPresenter(this) } // constructor(scanGroupFragment: ScanGroupFragment):this(scanGroupFragment) // fun ScanGroupPresenter(view: ScanGroupContract.View?){ // if (view == null) return // this.view = view // view.setPresenter(this) // } override fun getGroupInfo(groupId: String) { if (TextUtils.isEmpty(groupId)) return val list = ArrayList<Any>() list.add(groupId) RetrofitUtil.createService() .queryGroupByRUId(RpcHelper.getParamMap(ApiMethod.METHOD_QUERY_GROUP_BYRUID, list)) // .compose<Re