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

在主Activity外读取CSV文件时遇getAssets空对象引用错误求助

问题分析与解决

错误信息'android.content.res.AssetManager android.content.Context.getAssets()' on a null object reference的核心原因是**context对象为空**,调用getAssets()时触发空指针异常。你虽在Team类中定义了Context成员并通过构造方法传入,但问题大概率出在Team对象的实例化环节,导致context未被正确赋值。

常见错误场景及修复方案

  • 实例化Team时未传入有效Context
    若在Activity中写成Team team = new Team(null);,或在其他类中传递了空的context,都会引发该问题。
    正确做法:在Activity中实例化时,传入当前Activity的上下文:

    // 在MainActivity的onCreate方法内
    Team team = new Team(this);
    

    若在Fragment中实例化,使用requireContext()(避免getActivity()返回null):

    Team team = new Team(requireContext());
    
  • 使用了已失效的Context
    若传递的是Activity的context,但Activity已被销毁(比如在异步任务中使用已销毁的Activity context),也会导致context为空。这种情况建议改用Application Context,其生命周期与应用一致,不会轻易被回收:

    // 在Activity中获取Application Context
    Team team = new Team(getApplicationContext());
    

额外代码优化建议

  1. 增加空值判断,提前避免崩溃:
    public void loadAvenger() throws IOException {
        if (context == null) {
            Log.e("Team", "Context为空,无法加载资产文件");
            throw new IOException("Context不能为null");
        }
        AssetManager am = context.getAssets();
        // 后续代码...
    }
    
  2. 关闭IO流,避免资源泄漏:
    public void loadAvenger() throws IOException {
        if (context == null) {
            Log.e("Team", "Context为空,无法加载资产文件");
            throw new IOException("Context不能为null");
        }
        AssetManager am = context.getAssets();
        InputStream inStream = null;
        Scanner scan = null;
        try {
            inStream = am.open("data.csv");
            scan = new Scanner(inStream);
            while(scan.hasNext()){
                String line = scan.nextLine();
                String cont[] = line.split(",");
                // 确保CSV每行有足够字段,防止数组越界
                if (cont.length >= 8) {
                    Avenger temp = new Avenger(cont[0],cont[1],cont[2],cont[3],cont[4],cont[5],cont[6],cont[7]);
                    avengers.add(temp);
                } else {
                    Log.w("Team", "无效的CSV行:" + line);
                }
            }
        } finally {
            if (scan != null) scan.close();
            if (inStream != null) inStream.close();
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:23:25