我有一些android项目,我试图从“res / drawable-xhdpi”目录中读取一些文件,所以我把
InputStream is = null;
try {
is = getResources().openRawResource(R.drawable.my_btn); //my_btn is inside drawable-xhdpi directory
} catch (Exception e) {
e.printStackTrace();
}
但我得到
error opening trace file: No such file or directory
我该如何处理这个问题。我试图用绝对路径直接从FileInputStream
读取这个,然后我意识到提取文件的根是JVM
的根,所以我仍然有相同的No such file or directory
错误消息
更新:
我在assets
侧添加了src/main
目录,然后我将my_btn.png
放入其中,然后在我的MainActivity
类中调用
InputStream is = null;
try {
is = getAssets().open("my_btn.png");
} catch (Exception e) {
e.printStackTrace();
}
但我仍然得到同样的错误
答案 0 :(得分:2)
只有在"res/drawable-xhdpi"
设备上运行应用时,才会从xhdpi
获取drawable。否则它将尝试根据屏幕从相应的可绘制文件夹中获取drawable,如果不存在,您将得到与上面相同的错误。如果您不确定使用哪种屏幕尺寸,最好的办法是在res文件夹中创建一个名为"drawable"
的目录(即"res/drawable"
),然后将my_btn
添加到新的创建了"drawable"
文件夹。然后,无论屏幕大小如何,它都将从新文件夹中获取图像。
修改强>
您正在使用原始文件夹,而不是资源文件夹。 openRawResource
从原始文件夹中读取。使用以下代码获取drawable并将其转换为输入流(您必须使用try-catch包围)。
Drawable drawable = getResources().getDrawable(R.drawable.my_btn);
BitmapDrawable bitmapDrawable = ((BitmapDrawable) drawable);
Bitmap bitmap = bitmapDrawable.getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.JPEG, 100, stream); //use the compression format of your need
InputStream is = new ByteArrayInputStream(stream.toByteArray());
答案 1 :(得分:2)
_pm.iconStream = getResources()。openRawResource(+ R.drawable.pdf_icon);
答案 2 :(得分:1)
我只是想测试一下,然后拍照并将其发送给Parse
将测试图片放在res/raw/
(然后,使用现有代码,R.raw.whatever_you_call_the_image
)或assets/
中(或使用getAssets().open()
相对路径)的某个位置在assets/
到您的图片内。)