从缓存加载图像但返回空白屏幕

时间:2011-09-26 02:38:52

标签: android image caching bitmap

我尝试了从here得到的例子。该示例显示了如何显示比屏幕更大的图像以及像窗口一样的屏幕,允许用户通过滚动查看图像。然而,我想要实现的是类似的,而不是单个图像,我试图将18个较小的图像(171X205)组合成一个单独的图像。我能够做到这一点,但为了节省从服务器下载图像的加载时间,我缓存了图像。继承人的问题,即使图像确实被缓存,我似乎无法在屏幕上显示图像。因此,我通过从drawable文件夹中提取图像来尝试其他方法,但仍然出现相同的问题。有谁知道如何解决这个问题?

从缓存加载图片的代码片段:

for(int i =0; i<18; i++)
    File cacheMap = new File(context.getCacheDir(), smallMapImageNames.get(i).toString());
            if(cacheMap.exists()){
                //retrieved from cached
                    try {
                        FileInputStream fis = new FileInputStream(cacheMap);
                        Bitmap bitmap = BitmapFactory.decodeStream(fis)
                        puzzle.add(bitmap);
                     }catch(...){}
             }else{
                 Drawable smallMap = LoadImageFromWebOperations(mapPiecesURL.get(i).toString());
                if(i==0){
                    height1 = smallMap.getIntrinsicHeight();
                    width1 = smallMap.getIntrinsicWidth();
                }
                if (smallMap instanceof BitmapDrawable) { 
                    Bitmap bitmap = ((BitmapDrawable)smallMap).getBitmap();
                    FileOutputStream fos = null;
                    try {
                        cacheMap.createNewFile();
                        fos = new FileOutputStream(cacheMap);
                        bitmap.compress(CompressFormat.JPEG, 100, fos);
                        fos.flush();       
                        fos.close(); 
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }       

                    puzzle.add(bitmap);
                }
             }
}

从服务器检索图像的功能

private Drawable LoadImageFromWebOperations(String url) {
        // TODO Auto-generated method stub
        try
        {
            InputStream is = (InputStream) new URL(url).getContent();
            Drawable d = Drawable.createFromStream(is, "src name");
            return d;
        }catch (Exception e) {
            System.out.println("Exc="+e);
            return null;
        }
    }

我正在绘制画布,因此没有使用ImageView来显示图像。

1 个答案:

答案 0 :(得分:0)

对于我的所有延迟图像加载,我使用Prime