Android openRawResource()不适用于drawable

Bol*_*ain 12 android image inputstream drawable

我正在尝试通过这样做来创建输入流

InputStream is = (InputStream) getResources().openRawResource(R.drawable.image1);
Run Code Online (Sandbox Code Playgroud)

但我遇到了关于我的drawable文件(R.drawable.image1)的错误"类型原始的预期资源".image1是一个png,位于我的res/drawable文件夹中.

有任何想法吗???

Bol*_*ain 34

@Broatian我目前没有res/raw文件夹.我找到了一个替代的解决方案: is = context.getResources().openRawResource(+ R.drawable.image1);+节目的其他文件夹.谢谢您的帮助!

  • 这个加号有什么意义?这对我来说似乎不像标准的Java语法 - 是吗?它如何影响Android编译器? (5认同)
  • 这里发生了什么?为什么这样做?这显然有效. (3认同)
  • @tomi @maligree这是一元加运算符:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html在最新的Android Studio中,我使用了`0 + R.drawable .blah`.我认为正在发生的事情是它欺骗IDE不再确切地知道int的"类型"被传递到函数中,所以它不能抱怨没有接收引用"原始"资源的id.令人讨厌的是IDE过于激进,因为`openRawResource`的文档说'它可以用来打开可绘制,声音和原始资源'. (2认同)

Bro*_*ian 5

如果要使用此方法打开png,则必须将其放在res/raw文件夹中.然后,您将能够使用R.raw.image1访问png.

另一种方法是将其保存在drawable文件夹中,然后将drawable转换为InputStream.请参见如何将可绘制位读取为InputStream

我假设您知道如何获得drawable,否则请查看参考资料文档.