Android在应用程序上下文中保存图像

时间:2016-03-03 20:37:47

标签: java android android-layout listview android-studio

在我的MainActivity onCreate()中,我想填充一个列表视图。此列表视图包含字符串和位图。

在重新启动应用程序时,保存这些数据的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

根据您想要挂在这些文件上的紧密程度,有不同的可能性。最可靠的是方法getFilesDir()。每个应用程序都有自己的私有“文件目录”。

所有细节都在这里: https://developer.android.com/training/basics/data-storage/files.html

缓存目录(getCacheDir())类似,但用户可以删除缓存内容,以便更多地用于您不想挂起的临时文件。

字符串和位图都可以保存到文件中。您可以创建自己的名称值映射文件以链接它们。或者使用JSON对象或许多其他东西来组织字符串/位图列表。

答案 1 :(得分:1)

我有自己的缓存解决方案:

public class MyCache {

private String DiretoryName;

public void OpenOrCreateCache(Context _context, String _directoryName){
    File file = new File(_context.getCacheDir().getAbsolutePath() + "/" + _directoryName);
    if(!file.exists()){
        file.mkdir();
    }
    DiretoryName = file.getAbsolutePath();
}

public void SaveBitmap(String fileName, Bitmap bmp){
    try {
        File file = new File(DiretoryName+ "/" + fileName);
        if(file.exists()){
            file.delete();
        }
        FileOutputStream Filestream = new FileOutputStream(DiretoryName + "/" + fileName);
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream);
        byte[] byteArray = stream.toByteArray();
        Filestream.write(byteArray);
        Filestream.close();
        bmp.recycle();
    }
    catch (Exception e){
        e.printStackTrace();
    }
}

public Bitmap OpenBitmap(String name){
    try {
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inPreferredConfig = Bitmap.Config.ARGB_8888;
        File file = new File(DiretoryName+ "/" + name);
        if(file.exists()) {
            Bitmap bitmap = BitmapFactory.decodeFile(DiretoryName+ "/" + name, options);
            return bitmap;
        }
        else{
            return null;
        }
    }
    catch (Exception e){
        e.printStackTrace();
    }
    return null;
}

public void CleanCacheBitMap(){
    File file = new File(Diretorio);
    if(file.exists()){
        file.delete();
    }
}

}

并且onCreate:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    cache = new MyCache();
    cache.OpenOrCreateCache(this, "TheFolderNameForOpenOrSaveInAppCache");
}

为了节省运行时间:

cache.SaveBitmap("BitMapName", YourBitmap);

在运行时打开:

Bitmap bmp = cache.OpenBitmap("BitMapName");

此解决方案保存任何位图,特别是应用程序缓存(内部存储)中的文件夹。