【问题标题】:File not found when loading from assets?从资产加载时找不到文件?
【发布时间】:2016-09-13 18:57:05
【问题描述】:

我在我的资产文件夹中包含了几个预制的 .png 文件,但只有其中一些文件没有错误地通过:

AssetManager assetManager = context.getAssets();
Inputstream in = assetManager.open(assetName);

其中assetNameString,其中包含类似“myPic.png”的内容。

它似乎适用于某些文件,但对于其他文件,它会抛出 java.io.FileNotFoundException: myPic.png,即使我在 Assets 文件夹中看到它与许多其他似乎正在削减的文件一起。

【问题讨论】:

  • 查看 APK 本身并查看资产是否存在。 APK 只是一个 ZIP 样式的存档,因此有很多工具可以让您检查其中的内容。
  • @CommonsWare 不,这些资产不在 APK 中,但这是可以预见的,因为首先由于某种原因找不到它们
  • 资产中有子文件夹吗?
  • 不,都在同一个文件夹中。所有资产都集中在AndroidStudioProjects/MyAppName/app/src/main/assets/
  • “这是可以预见的”——不一定。 APK 可能拥有这些资产,但 AssetManager 出于某种原因不允许访问它们。但是,由于缺少资产,问题出在您的构建过程中。如果没有minimal reproducible example,那将很难调试。您可以考虑在某处发布您的 assets/ 内容的屏幕截图,从您的问题中链接到它,然后向我们提供 APK 中实际存在和不存在的内容的名单。

标签: java android file android-studio assets


【解决方案1】:

如果您在 Android Instrumentation 测试期间遇到此问题,可以通过更改以下内容来解决此问题:

ApplicationProvider.getApplicationContext().getAssets().open(YOUR_FILE)

对此:

InputStream inputStream = InstrumentationRegistry.getInstrumentation().
     getContext().getAssets().open(YOUR_FILE);

应用程序提供者知道将资源请求重定向到您的检测资源,然后回退到被测应用程序,但它没有相同的资产智能

【讨论】:

    【解决方案2】:

    显然,在 Android Studio 中关闭/重新打开项目就足以让它正常工作。不知道为什么它一开始没有注意到所有资产,但现在重启后它会注意到。

    【讨论】:

    • 我只花了 45 分钟来解决同样的问题,使用不同的命名组合并深入研究 assets/ 文件夹的权限......只需要重新启动 Android Studio。看起来资产更改需要从 Build -> Rebuild Project 进行完全重建。
    • 如上所述,浪费了很多时间,在我的情况下,因为我将文件夹放在src/main/res 下(连同布局,drawables,......),而不是在src/main 下,因为它有成为。
    • 在 assets 上重新创建文件使它对我有用(还没有尝试重新启动 Android Studio),我们可以使用 mContext.assets.list("path") 列出所有加载的文件
    • 如果重新启动编辑器不起作用,请尝试重新启动 windows。如果这无济于事,请尝试换房子。最终重启宇宙。我们可能永远不知道隐藏的错误潜伏在哪里。
    【解决方案3】:

    确保变量的名称与文件的名称相对应,它们区分大小写。这可能是某些文件未被读取的原因。

    【讨论】:

    • 案例/名称完全相同
    猜你喜欢
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    相关资源
    最近更新 更多