在我的MainActivity onCreate()
中,我想填充一个列表视图。此列表视图包含字符串和位图。
在重新启动应用程序时,保存这些数据的最佳方法是什么?
答案 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");
此解决方案保存任何位图,特别是应用程序缓存(内部存储)中的文件夹。