如何使用android [关闭]获取RealmObject中的最后一个修改过的RealmObject或字段
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用android [关闭]获取RealmObject中的最后一个修改过的RealmObject或字段相关的知识,希望对你有一定的参考价值。
我的应用程序运行如下:
- 从网址下载zip文件
- 提取下载的文件,获取csv文件和文件夹音频
- 将csv文件保存到领域
- 删除zip文件,fle提取,csv文件,只留下文件夹音频
- 显示来自领域的数据。
这里的问题是,当我从服务器更新数据时,我想通过比较url中的最后一个修改文件和设备中的文件来更新领域中的数据,但我删除了zip文件,提取文件,csv文件,只保留文件夹音频用mp3文件。当我得到最后一个修改过的mp3文件时,它只是获取我上次在服务器上更新的日期,而不是我在设备上提取它的日期。它应该始终小于还是等于服务器上的更新文件。
代码示例
功能提取文件zip
private void extractZipe() {
publishProgress(-1);
try {
ZipFile file = new ZipFile(zipFile);
if (file.isEncrypted()) {
file.setPassword("abcde12345-");
}
file.extractAll(zipFile.getParent());
zipFile.delete();
File csv = new File(context.getFilesDir(), "Data.csv");
DataManager.getInstance().readTestQuestion(context, name, csv);
csv.delete();
} catch (ZipException e) {
e.printStackTrace();
}
}
//Realm data
public void readTestQuestion(Context context, String name, File file) {
Realm realm = RealmManager.getDefault(context);
Test test = Test.findByName(realm, name);
String dateUpdate = new Date().toString();
try {
CSVReader reader = openCsvFromFile(file);
List<Question> questions = readQuestion(realm, reader, test.getName());
realm.beginTransaction();
test.getQuestions().addAll(questions);
realm.commitTransaction();
} catch (IOException e) {
e.printStackTrace();
}
}
从url检查lastModified
// Get LastModified file from server, it's true
HttpURLConnection connection = ....
long dt=connection.getLastModified();
if (dt == 0)
Log.d("carot", "download: No date information.");
else
Log.d("carot", "download: "+ new Date(dt)+ "::"+ dt );
代码检查设备中的最后修改文件
// Get LastModified file mp3 from device
File file = new File(holder.getContext().getFilesDir() + "/Data/Audio/", test.getQuestions().get(0).getAudio() + ".mp3");
long dt = file.lastModified();
if (dt == 0)
Log.d("carot", "click: No date information.");
else
Log.d("carot", "click: " + new Date(dt) + "::" + dt);
领域对象
//Realm Object Test with fields lastUpdated, created ..Always null because I did not process them before
public class Test extends RealmObject{
@PrimaryKey
@Required
private String id;
private String name;
private int duration;
private int number_of_questions;
private int display_order;
private int progress;
private String path;
private boolean is_deleted;
private String lastUpdated;
private String created;
private RealmList<Question> questions;
}
\\Question RealmObject
public class Question extends RealmObject{
@PrimaryKey
@Required
private String id;
@Index
private String audio;
@Index
private String photo;
private String text;
@Index
private String transcript;
private String typeName;
private int display_order;
}
(领域版本:1.2.0)
答案
1.)添加一个no-arg构造函数,将lastModified
日期设置为new Date()
。
2.)将你的模式版本增加到+1
,无论它现在是什么,并定义一个迁移,将lastModified
的值设置为new Date()
,其中lastModified
目前是null
。
以上是关于如何使用android [关闭]获取RealmObject中的最后一个修改过的RealmObject或字段的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# 中使用 xamarin 在 android 上获取 PSK? [关闭]