You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发遇Unresolved reference: resources错误,求解决

问题原因与解决方案

错误原因

resources 是Android中Context(如Activity、Application)的专属成员,它依赖Android运行时的上下文环境才能访问资源。你的DataSource是普通类,其companion object属于静态作用域,没有绑定任何Context实例,直接调用resources自然会出现「Unresolved reference」错误。
官方文档的示例是在有Context的环境(比如Activity内部)编写的,所以能正常运行,但你的代码场景不满足这个前提。

解决方案

方案1:通过方法参数传入Context动态获取列表

修改DataSource,让companion object提供一个接收Context的方法:

import android.content.Context
import com.example.wordadapter.R

class DataSource {
    companion object {
        fun getXList(context: Context): List<String> {
            return context.resources.getStringArray(R.array.String_List).toList()
        }
    }
}

使用时从有Context的地方(比如Activity)传入上下文:

// 在Activity中调用
val myList = DataSource.getXList(this)
// 如果是在Fragment中,用requireContext()
val myList = DataSource.getXList(requireContext())

方案2:初始化时绑定Application Context(全局可用)

如果需要全局复用这个列表,可以结合Application Context初始化:

import android.content.Context
import com.example.wordadapter.R

class DataSource(private val context: Context) {
    val xList: List<String> = context.resources.getStringArray(R.array.String_List).toList()

    companion object {
        lateinit var instance: DataSource

        // 用Application Context初始化,避免内存泄漏
        fun initialize(context: Context) {
            instance = DataSource(context.applicationContext)
        }
    }
}

然后在自定义Application类的onCreate方法中完成初始化:

import android.app.Application

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        DataSource.initialize(this)
    }
}

后续在任何地方都可以直接调用:

val myList = DataSource.instance.xList

注意事项

  • 永远优先使用applicationContext而非Activity的Context,避免因持有Activity引用导致内存泄漏
  • 静态作用域中不要随意持有Context实例,必须使用时确保是Application级别的上下文

内容的提问来源于stack exchange,提问作者Jaguar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 10:54:14