繁体   English   中英

将SD卡用于inputStream(图像)Android,而不是内部存储器

[英]Use SD card for inputStream (images) android instead of internal memory

我正在尝试(使用下面的方法)从互联网上获取图像并使用一些画布。 但有时我有outOfMemory异常。 所以我想知道是否有办法直接将inputStream加载到存储卡中而不是内部存储器中。

private Bitmap LoadImageFromWebOperations(String url)
{   

   try {
        InputStream is = (InputStream) new URL(url).getContent();
        Drawable d = Drawable.createFromStream(is, "src name");
        bitmap = ((BitmapDrawable)d).getBitmap().copy(Config.ARGB_8888, true);
        return bitmap;
        }catch (Exception e) {
        System.out.println("Exc="+e);
        return null;
    }
}

logcat表示异常是由于该行:

Drawable d = Drawable.createFromStream(is, "src name");

提前谢谢!

我从Fedor Vlasov的惰性列表演示中获取了这段代码: ListView中图像的延迟加载

首先,您需要创建一个将输入流复制到文件输出流的函数:

public static void CopyStream(InputStream is, OutputStream os)
{
    final int buffer_size=1024;
    try
    {
        byte[] bytes=new byte[buffer_size];
        for(;;)
        {
          int count=is.read(bytes, 0, buffer_size);
          if(count==-1)
              break;
          os.write(bytes, 0, count);
        }
    }
    catch(Exception ex){}
}

然后获取一个缓存文件夹:

if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
        cacheDir=new File(android.os.Environment.getExternalStorageDirectory(),"MyCacheDir");
    else
        cacheDir=context.getCacheDir();
    if(!cacheDir.exists())
        cacheDir.mkdirs();

然后加载您的位图:

 private Drawable getBitmap(String url) 
{
    String filename=URLEncoder.encode(url);
    File f= new File(cacheDir, filename);

    try {                        
        HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
        InputStream is = conn.getInputStream();
        OutputStream os = new FileOutputStream(f);
        CopyStream(is, os);
        os.close();            

        Bitmap bitmap = BitmapFactory.decodeStream(new FileInputStream(f));            
        return new BitmapDrawable(bitmap);
    } catch (Exception ex){
       ex.printStackTrace();
       return null;
    }
} 

暂无
暂无

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

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