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

Android应用从Firebase加载自定义ML模型报错问题咨询

错误原因及修复方案

以下是你代码和配置中可能存在的问题,按出现概率从高到低排列:

  • 下载类型参数错误:你调用getModel时传入的DownloadType.LOCAL_MODEL仅会读取设备本地已缓存的模型,首次加载时设备没有缓存就会直接抛出状态异常。你需要替换为DownloadType.LATEST_MODEL,让SDK优先拉取云端最新版本,本地有对应版本缓存时才会复用本地文件。
  • 网络条件限制不匹配:你设置了.requireWifi()的下载条件,如果测试设备当前使用的是移动数据,不会触发下载流程,也会返回该错误。测试阶段可先注释掉该限制,验证流程通了之后再按需开启。
  • 模型名称不匹配:代码中填写的模型名FindFunc需要和Firebase控制台中上传的模型名称完全一致,大小写、拼写差一个字符都会导致SDK找不到对应模型,抛出异常。
  • 项目配置不匹配:需要确认你App中使用的google-services.json文件和你上传模型的Firebase项目是同一个,配置文件不匹配会导致没有权限拉取模型。
  • 异步逻辑时序问题:模型下载是异步操作,你在构造方法中启动下载,若调用getInterpreter()时下载还未完成,拿到的就是空值,也会引发相关错误。建议你增加下载完成的回调,上层收到回调后再获取Interpreter实例。

修正后的核心代码示例

public class ImportUnFuncModel {
    private Interpreter interpreter = null;
    private static final String TAG = "ImportUnFuncModel";
    // 可选:增加回调接口通知上层下载状态
    public interface OnModelLoadListener {
        void onLoadSuccess(Interpreter interpreter);
        void onLoadFail(Exception e);
    }

    public ImportUnFuncModel(OnModelLoadListener listener) {
        CustomModelDownloadConditions conditions = new CustomModelDownloadConditions.Builder()
            // 测试阶段可注释掉WiFi要求
            // .requireWifi()
            .build();

        FirebaseModelDownloader.getInstance()
            // 替换为LATEST_MODEL
            .getModel("FindFunc", DownloadType.LATEST_MODEL, conditions)
                .addOnFailureListener(new OnFailureListener() {
                      @Override
                      public void onFailure(@NonNull Exception e) {
                          Log.i(TAG, "onFailure exception : " + e.toString());
                          if(listener != null) {
                              listener.onLoadFail(e);
                          }
                      }
                })
                .addOnSuccessListener(new OnSuccessListener<CustomModel>() {
                    @Override
                    public void onSuccess(CustomModel model) {
                        Log.i(TAG, "onSuccess model : " + model.toString());
                        File modelFile = model.getFile();
                        if (modelFile != null) {
                            interpreter = new Interpreter(modelFile);
                            Log.i(TAG, "onSuccess interpreter has been created successful : " + modelFile.toString());
                            if(listener != null) {
                                listener.onLoadSuccess(interpreter);
                            }
                        }
                    }
                });
    }

    public Interpreter getInterpreter() {
        return interpreter;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:27:02