Android:为什么日期数据不正确?从数据库中检索数据时

时间:2020-07-17 03:00:49

标签: android sqlite date android-room

从数据库中获取对象时,其长日期与插入前的日期不同。

我的插入代码:

@Insert(onConflict = OnConflictStrategy.REPLACE)
protected abstract void insert(Content content);

public void insertContent(Content content) {
    long now = System.currentTimeMillis();

    content.setDate_of_creation(now);
    content.setLast_edited(now);
    Log.d(TAG, "insertContent: now is: " + now);
    insert(content);
}

观察者方法:

    contentRepository
            .getLastContentEditedAtFolder()
            .observeForever(
                    content -> {
                        Log.d(TAG, "onChanged: content is: " + content);
                        boolean antiSpammingBoolean = selfDefaultingBoolean.getValue();

                        Log.d(TAG, "observeForever: antiSpammingBoolean is: " + antiSpammingBoolean);

                        if (antiSpammingBoolean && content != null) {
                            long now = System.currentTimeMillis();
                            long lastEdited = content.getLast_edited();
                            Log.d(TAG, "observeForever: now is: " + now);
                            Log.d(TAG, "observeForever: lastEdited is: " + lastEdited);
                            if (lastEdited + (long)1000 > now) {

                                Log.d(TAG, "observeForever: content was edited within the first 1000 milliseconds");
                                int folderId = content.getParent_folder_id();

                                Log.d(TAG, "observeForever: folder id is: " + folderId);

                                if (folderId != 0) {
                                    getFolderTotalAndUpdate(folderId);
                                } else {
                                    Log.d(TAG, "observeForever: content does not belong to a folder!!");
                                }

                            } else {
                                Log.println(Log.ERROR, TAG, "observeForever: content was created way before 1000 ms");
                            }

                        }


                    }
            );

我希望代码仅在上一版与现在之间的1000毫秒内执行,以防止数据库中的任何重新计算,问题是数据库中存储的long数据错误为2735105毫秒,即45.58分钟

日志:

D/AbstractContentDao: insertContent: now is: 1594952285000
D/FolderTotalUpdaterView: onChanged: content is: com.example.flyhigh.data.pojos_entities.content.Content@e190ded
D/FolderTotalUpdaterView: observeForever: antiSpammingBoolean is: true
D/FolderTotalUpdaterView: observeForever: now is: 1594952285084
D/FolderTotalUpdaterView: observeForever: lastEdited is: 1594949549895
E/FolderTotalUpdaterView: observeForever: content was created way before 1000 ms

插入发生在1594952285000。是从insert {{}}日志中的insertContent()方法获得的。

当它通过条件"insertContent: now is: " + now时,它已经通过了84毫秒(我的测试电话速度很慢),这意味着它应该直接进入if (antiSpammingBoolean && content != null) {日志,但是{{1} }给我1594949549895,这将是第一个"content was edited within the first 1000 milliseconds"content.getLast_edited();之间相差45分钟的时间,这是不可能的。

这是怎么回事?

编辑:我做了另一个测试,并且数据库中的long被更改了:

long now = System.currentTimeMillis();

这带来了日志:

content.setLast_edited(now);

在进入数据库之前,这表明Content对象内部的long仍然相同。

但是在撤回它时,它已经改变了100.56分钟,这很奇怪,如果我们从上次在数据库中插入对象的时间减去这一时间,我认为这是两次测试之间我花费的实时时间(100.58- 45.58)55分钟。

1 个答案:

答案 0 :(得分:1)

我解开了迷雾... 我从应用程序的另一侧插入对象,其中文件夹ID始终为0 ...并且完成了查询,以便仅将对象插入要计算的文件夹中...我忘了......

@Query("SELECT * FROM content_table WHERE parent_folder_id != 0 ORDER BY last_edited DESC LIMIT 1")
public abstract LiveData<Content> getLastContentEditedAtFolder();

所以一切都按预期进行...甚至我自己写的方法也说LMAO