繁体   English   中英

在Android中将资源读取为InputStream

[英]reading resource as InputStream in android

我有一些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错误消息

更新:

我在src/main侧面添加了一个assets目录,然后将my_btn.png放在其中,然后在MainActivity类中调用

InputStream is = null;

        try {

            is = getAssets().open("my_btn.png");

        } catch (Exception e) {
            e.printStackTrace();
        }

但我仍然遇到相同的错误

仅当您在xhdpi设备上运行应用程序时, xhdpi"res/drawable-xhdpi"获取"res/drawable-xhdpi" xhdpi 否则,它将尝试根据屏幕从相应的drawable文件夹中获取drawable,如果不存在,则会出现与上述相同的错误。 如果不确定使用哪种屏幕尺寸,最好的解决方法是在res文件夹中创建一个名为"drawable"的目录(即"res/drawable" ),然后将my_btn添加到新创建的"drawable"文件夹中。 然后,无论屏幕大小如何,它将从新文件夹中获取图像。

编辑

您使用的是原始文件夹,而不是资源文件夹。 openRawResource从原始文件夹读取。 使用以下代码获取可绘制对象并将其转换为输入流(您必须使用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());

_pm.iconStream = getResources()。openRawResource(+ R.drawable.pdf_icon);

我只是在尝试测试,然后拍照并发送给Parse

将测试图像放置在res/raw/ (然后使用R.raw.whatever_you_call_the_image使用现有代码)或assets/ (然后使用getAssets().open()assets/内的相对路径)放置到您的位置图片)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM