相关疑难解决方法(0)

尝试访问Kotlin片段中的视图时出现NullPointerException

如何使用Kotlin Android扩展程序Fragment?如果我在里面使用它们onCreateView(),我得到这个NullPointerException例外:

引起:java.lang.NullPointerException:尝试在空对象引用上调用虚方法'android.view.View android.view.View.findViewById(int)'

这是片段代码:

package com.obaied.testrun.Fragment

import android.os.Bundle
import android.support.v4.app.Fragment
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.obaied.acaan.R
import kotlinx.android.synthetic.main.fragment_card_selector.*

public class CardSelectorFragment : Fragment() {
    val TAG = javaClass.canonicalName

    companion object {
        fun newInstance(): CardSelectorFragment {
            return CardSelectorFragment()
        }
    }

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        var rootView = inflater?.inflate(R.layout.fragment_card_selector, container, false)
        btn_K.setOnClickListener { Log.d(TAG, "onViewCreated(): hello world"); }

        return rootView
    }
}
`
Run Code Online (Sandbox Code Playgroud)

android kotlin kotlin-android-extensions

210
推荐指数
4
解决办法
4万
查看次数

UninitializedPropertyAccessException:lateinit属性pref尚未初始化

我知道这个问题已经回答[这里](lateinit属性尚未初始化).但这是由于黄油刀库问题但我的情况有所不同.完全不同.在我的情况下,当我在我的基本活动中使用匕首注入属性时,它显示我的错误引起:kotlin.UninitializedPropertyAccessException:lateinit属性pref尚未初始化

但是当我在我的子活动(登录活动)中使用它时,它的工作正常.

例如.pref.setLanguage("abc") - >它在登录活动中工作正常,但在基本活动中引发错误

这是我的代码:

BaseActivity

abstract class BaseActivity : AppCompatActivity() {
@Inject
lateinit var pref: AppSharedPreferences
@Inject
lateinit var utils: Utils
lateinit var mCurrentLanguage: String
protected lateinit var progressBarUtils: ProgressBarUtils

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    progressBarUtils = ProgressBarUtils(this)
    mCurrentLanguage = "EN"
    pref.setSelectedLanguage(mCurrentLanguage)   
}
}
Run Code Online (Sandbox Code Playgroud)

LoginActivity

class LoginActivity : BaseActivity() {
private val TAG = this.javaClass.name
lateinit var loginViewModel: LoginViewModel
@Inject
lateinit var viewModelFactory: LoginViewModelFactory


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_login)
    AndroidInjection.inject(this)
    loginViewModel …
Run Code Online (Sandbox Code Playgroud)

android kotlin dagger-2

13
推荐指数
1
解决办法
3万
查看次数