我的应用程序不仅可以在线工作,还可以离线工作。出于这个原因,我正在考虑找到兑现数据的最佳方式。我不喜欢使用 SharedPreference 来存储数据,但在 android 文档中写入了首选项值允许的最大字符大小为 8192。我不知道这是否可以?我试图通过尝试使用 FileCashing 或 sqLite 兑现来放弃这个想法。
那么你们认为什么是最好的 SharedPreference vs FileCashing 或 vs SqLiteCaching?
我的应用程序不仅可以在线工作,还可以离线工作。出于这个原因,我正在考虑找到兑现数据的最佳方式。我不喜欢使用 SharedPreference 来存储数据,但在 android 文档中写入了首选项值允许的最大字符大小为 8192。我不知道这是否可以?我试图通过尝试使用 FileCashing 或 sqLite 兑现来放弃这个想法。
那么你们认为什么是最好的 SharedPreference vs FileCashing 或 vs SqLiteCaching?
将缓存目录中的 json 保存为文件....
节省:
// Instantiate a JSON object from the request response
JSONObject jsonObject = new JSONObject(json);
// Save the JSONOvject
ObjectOutput out = new ObjectOutputStream(new FileOutputStream(new File(getCacheDir(),"")+"cacheFile.srl"));
out.writeObject( jsonObject );
out.close();
取回:
// Load in an object
ObjectInputStream in = new ObjectInputStream(new FileInputStream(new File(new File(getCacheDir(),"")+"cacheFile.srl")));
JSONObject jsonObject = (JSONObject) in.readObject();
in.close();
根据您的要求,我会推荐 SQLite 数据库。
由于共享首选项适用于配置存储 - 通常是小数据/字符串。
文件缓存很难管理,所以我推荐 SQLite - 易于管理和存储海量数据的能力。
考虑到性能,如果索引的数量不是很大,SQLite 数据库应该有可以接受的性能。例如,仅比文件缓存慢几毫秒。
您也许可以将这两种方法结合在一起。使用存储在 SQLite 中的具有索引偏移量的随机访问文件。
我使用了内部存储,它将文件存储在应用程序包目录中,非根设备无法访问。
这里是可以创建、读取和删除文件的类
public class ReadWriteJsonFileUtils {
Activity activity;
Context context;
public ReadWriteJsonFileUtils(Context context) {
this.context = context;
}
public void createJsonFileData(String filename, String mJsonResponse) {
try {
File checkFile = new File(context.getApplicationInfo().dataDir + "/new_directory_name/");
if (!checkFile.exists()) {
checkFile.mkdir();
}
FileWriter file = new FileWriter(checkFile.getAbsolutePath() + "/" + filename);
file.write(mJsonResponse);
file.flush();
file.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public String readJsonFileData(String filename) {
try {
File f = new File(context.getApplicationInfo().dataDir + "/new_directory_name/" + filename);
if (!f.exists()) {
onNoResult();
return null;
}
FileInputStream is = new FileInputStream(f);
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
return new String(buffer);
} catch (IOException e) {
e.printStackTrace();
}
onNoResult();
return null;
}
public void deleteFile() {
File f = new File(context.getApplicationInfo().dataDir + "/new_directory_name/");
File[] files = f.listFiles();
for (File fInDir : files) {
fInDir.delete();
}
}
public void deleteFile(String fileName) {
File f = new File(context.getApplicationInfo().dataDir + "/new_directory_name/" + fileName);
if (f.exists()) {
f.delete();
}
}
}
您可以通过调用ReadWriteJsonFileUtils类方法来创建、读取和删除文件,如下所示:
用于创建文件:
try {
new ReadWriteJsonFileUtils(context).createJsonFileData(file_name, data);
} catch (Exception e) {
e.printStackTrace();
}
对于读取文件:
String jsonString = new ReadWriteJsonFileUtils(context).readJsonFileData(file_name);
用于删除单个文件
new ReadWriteJsonFileUtils(context).deleteFile(file_name);
用于删除所有文件
new ReadWriteJsonFileUtils(context).deleteFile();