lateinit 属性 dataName 尚未初始化

lateinit property dataName has not been initialized

我不知道这是怎么回事

主要Activity

private lateinit var adapter: Adapter
private lateinit var newRecyclerView: RecyclerView
private lateinit var dataAvatar: Array<Int>
private lateinit var dataUsername: Array<String>
private lateinit var dataName: Array<String>
private lateinit var dataLocation: Array<String>
private lateinit var dataRepository: Array<String>
private lateinit var dataCompany: Array<String>
private lateinit var dataFollowers: Array<String>
private lateinit var dataFollowing: Array<String>
private lateinit var users: ArrayList<Data>


override fun onCreate(savedInstanceState: Bundle?) {

    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    newRecyclerView = findViewById(R.id.Rc_list)
    newRecyclerView.layoutManager = LinearLayoutManager(this)
    newRecyclerView.setHasFixedSize(true)

    users = arrayListOf<Data>()
    getUserdata()

}

private fun getUserdata() {
    for (i in dataName.indices) {


        val user = Data(
            dataAvatar[i],
            dataName[i],
            dataCompany[i],
            dataLocation[i],
            dataRepository[i],
            dataFollowers[i],
            dataFollowing[i],
            dataUsername[i]
        )
       /*user.avatar = dataAvatar[i]
        user.name = dataName[i]
        user.company = dataCompany[i]
        user.location = dataLocation[i]
        */

        users.add(user)
    }
    val adapter = Adapter(users)
    newRecyclerView.adapter = adapter
    adapter.setOnItemClickListener(listener = object : Adapter.onItemClickListener {
        override fun onItemClick(position: Int) {

            //  Toast.makeText(this@MainActivity, users[position].name, Toast.LENGTH_SHORT).show()

            val intent = Intent(this@MainActivity, Detail::class.java)
            intent.putExtra("avatar", users[position].avatar)
            intent.putExtra("username", users[position].username)
            intent.putExtra("name", users[position].name)
            intent.putExtra("location", users[position].location)
            intent.putExtra("repository", users[position].repository)
            intent.putExtra("company", users[position].company)
            intent.putExtra("followers", users[position].followers)
            intent.putExtra("following", users[position].following)
            startActivity(intent)




            this@MainActivity.startActivity(intent)
            Toast.makeText(this@MainActivity, users[position].name, Toast.LENGTH_SHORT).show()
        }
    })

}

我遇到了这个问题

2022-03-18 09:18:27.393 13874-13874/com.example.githubuser2 E/AndroidRuntime:致命异常:main 进程:com.example.githubuser2,PID:13874 java.lang.RuntimeException: 无法启动 activity ComponentInfo{com.example.githubuser2/com.example.githubuser2.MainActivity}: kotlin.UninitializedPropertyAccessException: lateinit 属性 dataName尚未初始化 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:223) 在 android.app.ActivityThread.main(ActivityThread.java:7656) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) Caused by: kotlin.UninitializedPropertyAccessException: lateinit 属性 dataName 尚未初始化 在 com.example.githubuser2.MainActivity.getUserdata(MainActivity.kt:100) 在 com.example.githubuser2.MainActivity.onCreate(MainActivity.kt:40) 在 android.app.Activity.performCreate(Activity.java:8000) 在 android.app.Activity.performCreate(Activity.java:7984) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:223) 在 android.app.ActivityThread.main(ActivityThread.java:7656) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 2022-03-18 09:18:27.469 13874-13874/com.example.githubuser2 I/Process:发送信号。 PID:13874 SIG:9

在 android studio 上启动成功,但应用程序未打开..它只是在我看到第一个 activity

之前强行关闭

lateinit property dataName has not been initialized

这是因为您在使用

中的值初始化它之前访问了 dataName 变量
val user = Data(
            dataAvatar[i],
            dataName[i], <<<<
            dataCompany[i],
            dataLocation[i],
            dataRepository[i],
            dataFollowers[i],
            dataFollowing[i],
            dataUsername[i]
        )

对于 private lateinit var dataName: Array<String>.

用数据填充数组然后访问它。

您正在使用 dataName 而未初始化

尝试

private var dataName: ArrayList<String> = ArrayList()

或者您可以在运行时检查 lateinit 是否被初始化

lateinit var dataName:  Array<String>

if(this::dataName.isInitialized) { // Do your work} 
else {//dataName is not initialized }

在初始化之前访问 lateinit 变量。 你必须在使用它之前初始化 lateinit 变量。

错误点在这里

private fun getUserdata() {
    for (i in dataName.indices) {  // << ErrorPoint dataName.indices (dataName is not initialized but try to access it)
        ...
    }
}

你可以通过isInitislized

检查是否初始化
if(::dataName.isInitialized){
    for (i in dataName.indices) {
        // ... do something
    }
}