Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从缓存加载图像,但返回一个空白屏幕_Android_Image_Caching_Bitmap - Fatal编程技术网

Android 从缓存加载图像,但返回一个空白屏幕

Android 从缓存加载图像,但返回一个空白屏幕,android,image,caching,bitmap,Android,Image,Caching,Bitmap,我尝试了我从中得到的例子。这个例子展示了如何显示一个比屏幕大的图像,屏幕就像一个窗口,允许用户通过滚动查看图像。然而,我想要实现的是相似的,我尝试将18个较小的图像171X205组合成一个单独的图像,而不是一个单独的图像。我能够做到这一点,但为了节省从服务器下载图像时的加载时间,我缓存了图像。这里的问题,我似乎不能显示在屏幕上的图像,即使图像确实是缓存。因此,我尝试了从drawable文件夹中获取图像的其他方法,但仍然出现相同的问题。有人知道如何着手解决这个问题吗 从缓存加载图像的代码片段: f

我尝试了我从中得到的例子。这个例子展示了如何显示一个比屏幕大的图像,屏幕就像一个窗口,允许用户通过滚动查看图像。然而,我想要实现的是相似的,我尝试将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);
                }
             }
}

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

对于我使用的所有惰性图像加载。

对于我使用的所有惰性图像加载。

对于我的一些项目,我使用缓存。发布下载时用于缓存每个图像的代码。并发布从缓存中检索它们的代码。实际上这是一个正确的问题。你是如何加载图像的?比如18个不同的URL?我经常使用缓存,可能有更好的方法。在加载图像时添加了代码片段。puzzle只是一个ArrayList,用于保存所有18个图像,无论是来自缓存还是来自服务器,都是缓存中不存在的图像。再说一遍,您是通过URL还是其他方式从18个不同的图像加载这些图像吗?我的一些项目使用缓存。发布下载时用于缓存每个图像的代码。并发布从缓存中检索它们的代码。实际上这是一个正确的问题。你是如何加载图像的?比如18个不同的URL?我经常使用缓存,可能有更好的方法。在加载图像时添加了代码片段。puzzle只是一个ArrayList,用于保存所有18个图像,无论是来自缓存还是来自服务器,都是缓存中不存在图像。再说一遍,您是通过URL还是什么从18个不同的图像加载这些图像?
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;
        }
    }