当前位置: 首页 > 知识库问答 >
问题:

lateinit属性dataName尚未初始化

穆俊杰
2023-03-14

我不知道这是怎么回事

主要活动

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。实例githubuser2 E/AndroidRuntime:致命异常:主进程:com。实例githubuser2,PID:13874 java。lang.RuntimeException:无法启动活动组件信息{com.example.githubuser2/com.example.githubuser2.MainActivity}:kotlin。UninitializedPropertyAccessException:lateinit属性dataName尚未在android上初始化。应用程序。活动线程。android上的performLaunchActivity(ActivityThread.java:3449)。应用程序。活动线程。android上的handleLaunchActivity(ActivityThread.java:3601)。应用程序。服务器事务。启动ActivityItem。在android上执行(LaunchActivityItem.java:85)。应用程序。服务器事务。交易执行人。android上的executeCallbacks(TransactionExecutor.java:135)。应用程序。服务器事务。交易执行人。在android上执行(TransactionExecutor.java:95)。应用程序。android上的ActivityThread$H.handleMessage(ActivityThread.java:2066)。操作系统。处理程序。android上的dispatchMessage(Handler.java:106)。操作系统。活套。android上的loop(Looper.java:223)。应用程序。活动线程。java上的main(ActivityThread.java:7656)。郎。反思。方法在com上调用(本机方法)。Android内部的操作系统。RuntimeInit$MethodandArgscaler。在com上运行(RuntimeInit.java:592)。Android内部的操作系统。合子岩。主要(ZygoteInit.java:947)由:kotlin引起。UninitializedPropertyAccessException:lateinit属性dataName尚未在com上初始化。实例githubuser2。主要活动。getUserdata(MainActivity.kt:100)位于com。实例githubuser2。主要活动。在android上创建(MainActivity.kt:40)。应用程序。活动android上的performCreate(Activity.java:8000)。应用程序。活动在android上执行创建(Activity.java:7984)。应用程序。仪表。android上的callActivityOnCreate(Instrumentation.java:1309)。应用程序。活动线程。android上的performLaunchActivity(ActivityThread.java:3422)。应用程序。活动线程。handleLaunchActivity(ActivityThread.java:3601)

在android Studio上启动成功,但应用程序没有打开...它只是在我看到第一个活动之前强制关闭

共有3个答案

万德海
2023-03-14

您在没有初始化的情况下使用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 }
轩辕源
2023-03-14

尚未初始化lateinit属性dataName

这是因为在使用中的值初始化dataName变量之前,您正在访问该变量

val user = Data(
            dataAvatar[i],
            dataName[i], <<<<
            dataCompany[i],
            dataLocation[i],
            dataRepository[i],
            dataFollowers[i],
            dataFollowing[i],
            dataUsername[i]
        )

对于私有lateinit var dataName:Array

用数据填充阵列,然后访问它。

车诚
2023-03-14

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

错误点在这里

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

您可以通过isInitislize检查初始化与否

if(::dataName.isInitialized){
    for (i in dataName.indices) {
        // ... do something
    }
}
 类似资料:
  • 我正在尝试使用Spring-boot+Vaadin创建一个web项目,并且希望使用spring-data-jpa和hibernate从PostgreSQL数据库中获取数据。 在我的Vaadin看来,我尝试自动连接我的服务类,但我总是得到null,而且eror堆栈跟踪没有告诉我原因。 数据库得我得配置: 视图和UI: pom.xml: 我的服务: 更新的解决方案:

  • 我正在为DI与Dagger2的项目工作。我正在MVP架构中注入presenter。由于某种原因,当我构建应用程序时,它会出现错误:“LateInit property presenter has not been initialized”。我知道这意味着没有注射,但我不明白为什么。下面是我的代码: 应用程序类 家庭模块 AppComponent 房屋结构 如果需要任何关于代码的其他信息,请询问..

  • 当变量只在OnCreate中声明时,为什么我的片段不进入onCreateView?

  • 我的代码成功构建,但每当我运行它时都会出现异常。不知道为什么匕首2不初始化变量。请告诉我哪里错了。给出以下例外情况: UninitializedPropertyAccessException:lateinit属性databaseService尚未初始化 依赖关系:

  • 我经常得到。但这个应用程序运行得很好。注意:我不想将演示者注入到活动中。提前谢谢! 以下是我的活动: 这是我的主持人: 这是我的数据管理器: 和AppDataManager: 最后,我的测试失败了: gradle文件: 我的模块课程: 实际错误是科特林。UninitializedPropertyAccessException:lateinit属性dataManager尚未初始化

  • Json服务器数据显示,在使用retrofit2和rxjava2的android中,当参数传递给inteface时,会出现错误。 接口