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

非Activity类调用getResources().openRawResource报错求助

解决非Activity类中调用getResources()报错的问题

嘿,这个问题我太熟了!咱们先搞懂为啥会报错:getResources()是Context类的方法,而MainActivity本身就是Context的子类,所以在Activity里能直接调用没问题,但你的非Activity类(就是那个resources对象所属的类)没有持有Context实例,自然没法调用这个方法,这就是报错的核心原因。

接下来给你两种实用的解决方案,你可以根据自己的代码结构选:

方案一:给非Activity类传入Context实例

假设你的非Activity类叫ResourceReader,咱们先给它加个带Context参数的构造方法,让它持有Context引用:

public class ResourceReader {
    private Context mContext;

    // 构造方法接收Context
    public ResourceReader(Context context) {
        this.mContext = context;
    }

    public List<VDienas> readData() {
        // 这里用持有的mContext调用getResources()
        InputStream is = mContext.getResources().openRawResource(R.raw.your_resource_file);
        // 这里写你读取数据并转换成List<VDienas>的逻辑
        // ...
        return vardadienasList;
    }
}

然后回到MainActivity里,创建这个类的实例时传入this(因为Activity本身就是Context):

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // 传入MainActivity的Context创建实例
    ResourceReader resources = new ResourceReader(this);
    vardadienas = resources.readData();
    // 后续的业务逻辑...
}

方案二:把读取方法改成静态工具方法(适合工具类场景)

如果你的resources是个工具类,那直接把readData改成静态方法,让方法接收Context参数更方便:

public class ResourceUtils {
    // 静态方法,直接传入Context
    public static List<VDienas> readData(Context context) {
        InputStream is = context.getResources().openRawResource(R.raw.your_resource_file);
        // 读取数据并转换的逻辑
        // ...
        return vardadienasList;
    }
}

然后在MainActivity里直接调用:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    vardadienas = ResourceUtils.readData(this);
    // ...
}

小提醒

如果担心内存泄漏,建议使用ApplicationContext代替Activity的Context,比如把this换成getApplicationContext(),这样即使Activity被销毁,也不会因为持有引用导致内存泄漏哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:31:59