Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.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
Java Android:如何将位图写入内部存储器_Java_Android_Bitmap_Save_Storage - Fatal编程技术网

Java Android:如何将位图写入内部存储器

Java Android:如何将位图写入内部存储器,java,android,bitmap,save,storage,Java,Android,Bitmap,Save,Storage,我正在制作一个从URL获取图像的应用程序。我希望能够将这些图像存储在手机上,这样,如果url与以前相同,用户就不必等待图像加载,而是应用程序会将其拉起(因为已经收到过一次) 这是我现在的代码: URL url2 = new URL("http://ddragon.leagueoflegends.com/cdn/5.9.1/img/champion/" + champ + ".png"); InputStream is = new BufferedI

我正在制作一个从URL获取图像的应用程序。我希望能够将这些图像存储在手机上,这样,如果url与以前相同,用户就不必等待图像加载,而是应用程序会将其拉起(因为已经收到过一次)

这是我现在的代码:

            URL url2 = new URL("http://ddragon.leagueoflegends.com/cdn/5.9.1/img/champion/" + champ + ".png");
            InputStream is = new BufferedInputStream(url2.openStream());
            //Save is to file
            FileOutputStream fos = null;
            try {
                fos = context.openFileOutput("temp_file", Context.MODE_PRIVATE);
                int b;
                while( (b = is.read()) != -1){
                    fos.write(b);
                }
                fos.close();
            } catch (FileNotFoundException asdf) {
                asdf.printStackTrace();
            }
            bd = BitmapFactory.decodeStream(is);
但是,位图没有fos.write()。此外,我也不知道如何使文件过量


任何帮助都会很好:)

这个
Bitmap
类有一个
compress()
方法来写入
OutputStream

bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
这将使用PNG格式压缩位图,该格式是无损的,因此您不会因为压缩而牺牲图像质量

要在写入文件后访问该文件,请使用
BitmapFactory的
decodeFile()
方法

Bitmap bitmap = BitmapFactory.decodeFile(pathToFile);

所以使用第一行代码,我会有一个文件“temp_文件”?pathToFile是否只是“temp_file”?最终,您的文件名不会是
temp_file
,而是根据正在缓存的图像命名。看起来您的
champ
变量可能适用于此。这样您就有了一个查询缓存的键。