【问题标题】:How to get last Modified RealmObject or fields in RealmObject with android [closed]如何使用android获取最后修改的RealmObject或RealmObject中的字段[关闭]
【发布时间】:2018-03-05 13:33:21
【问题描述】:

我的应用程序运行如下:

  • 从 url 下载 zip 文件

  • 提取下载的文件,获取 csv 文件和文件夹 音频

  • 将 csv 文件保存到领域

  • 删除 zip 文件、文件提取、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 );

代码检查设备中的 lastModified 文件

// 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)

【问题讨论】:

  • Stackoverflow 不是提交错误报告/问题/功能请求的地方。
  • @H.B.这不是真正的错误报告/问题/功能请求,更像是“我该怎么做X
  • H.B_ 我只是在寻找解决我的问题的方法,很抱歉打扰您。 EpicPandaForce_ 谢谢你帮助我,你帮助我从 github 到 stackoverflow,祝你有美好的一天
  • @EpicPandaForce:嗯,是的,但是问题模板只是简单地复制和粘贴。在 stackoverflow 上,事情应该是 questions 并相应地结构化。这样一来,就好像有人迷路了,最终也走错了地方。

标签: android file realm


【解决方案1】:

1.) 添加一个无参数构造函数,将lastModified 日期设置为new Date()

2.) 将架构版本增加到现在的 +1,并定义将 lastModified 的值设置为 new Date() 的迁移,其中 lastModified 当前为 null

【讨论】:

  • 谢谢,当您的建议有效时我会打绿色,再次谢谢您
猜你喜欢
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-26
  • 2017-03-29
相关资源
最近更新 更多