【问题标题】:Where does Android look for resource files at run time?Android 在运行时在哪里寻找资源文件?
【发布时间】:2016-07-30 02:21:31
【问题描述】:

我正在尝试打开位于我的 android 工作室项目 @ res/drawable/conan_obrian.png 中的文件。但是,抛出了 java.io.FileNotFoundException。我尝试了不同的路径名组合,但没有结果。

这个 sn-p 正在抛出异常:

    InputStream is;
    byte[] buffer = new byte[0];
    try {
        final AssetManager assetMgr = context.getResources().getAssets();
        is = assetMgr.open("drawable/conan_obrian.png");
        buffer = new byte[is.available()];
        is.read(buffer);
    } catch (IOException e) {
        e.printStackTrace();
    }
    serverAPI.register(userName, Base64.encodeToString(buffer,Base64.DEFAULT).trim(), myCrypto.getPublicKeyString());

【问题讨论】:

  • 你的assets文件夹是否真的包含一个drawable文件夹?
  • AS > 2.0 中是否有默认资产文件夹? - 找不到。
  • 我不知道。不过,您可以使用 File > New 菜单创建 Assets 文件夹。否则,我想我的答案就是你要找的。不清楚为什么需要字节数组
  • Drawable to byte[]的可能重复
  • 应该说...但我确实回答了标题中的问题

标签: android


【解决方案1】:

如果您有一个assets/drawable 文件夹,您的代码将是正确的,但您正在尝试加载一个资源,因此应该是R.drawable.conan_obrian

例如,您可以在 ImageView 上将该 id 用于setResourceDrawable

或者您可以使用带有该 ID 的 Drawable 对象

Drawable d = getResources().getDrawable(R.drawable.conan_obrian) 

res/ 目录下的所有内容都会加载到R.java 文件中的一长串整数中。

【讨论】:

  • 我没有使用 .png 文件作为布局资源。所以,我认为我不能使用对 Drawable 对象的引用,例如 R.drawable.conan_obrian。
  • 它不在布局文件夹中...我没说R.layout是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2010-09-25
  • 2015-03-28
相关资源
最近更新 更多