领域没有明显原因丢失数据

时间:2017-02-16 12:05:53

标签: android realm

我遇到了数据丢失的问题。

基本上,我从类中保存了一些数据,然后我调用了一个API,在响应中我需要保存的数据用于解析。

问题在于,当我检索保存在领域中的数据(实际保存,我在调试中检查)时,它什么也没有返回,所以有些东西正在删除它。

奇怪的是,这只是在我第一次保存这些数据时才添加,当没有保存这些模型时,我也没有办法删除这些数据

这是我在AsynkTask结尾处保存数据并调用API的地方:

protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        Realm realm = Realm.getDefaultInstance();
        realm.beginTransaction();
        realm.copyToRealmOrUpdate(mContacts);
        realm.commitTransaction();
        mContacts = DaoContacts.getAllContactsSortedAsList();
        mDataChangeCallback.onDataSetChanged();
        PojoRequestCheckNumbers numbers = new PojoRequestCheckNumbers();
        for (int i = 0; i < mContacts.size(); i++) {
            for (ModelNumber n : mContacts.get(i).getNumbers()) {
                numbers.addNumber(n.getNumber());
            }
        }
        if (numbers.size() > 0)
            ApiManager.checkNumbers(new RequestCheckContacts(this, numbers));
        mLoadCallback.onPostContactsLoad();
    }

这是我从领域加载数据的地方,它在API调用的响应中(在此我也因其他原因生成哈希映射,但是hashmap也是空的,因为它是从联系人生成的。

JSONArray jsonNumbers = responseJson.getJSONArray(NUMBERS_FIELD);
ArrayList<ModelContact> contacts = DaoContacts.getAllContactsSortedAsList();
Map numberMap = new HashMap<String, Long>();
for (ModelContact m : contacts) {
   for (ModelNumber s : m.getNumbers()) {
       numberMap.put(s.getNumber(), m.get_ID());
   }
}

在此之后,当我尝试从hashmap检索数据时出现错误,因为它显然是空的。

try {
   //TODO: check why null
   long contact_id = (long) numberMap.get(jsonNumbers.getString(i)); <-- ERROR
   for (ModelContact mc : contacts) {
       if (mc.get_ID() == contact_id) {
           for (ModelNumber n : mc.getNumbers()) {
               if (jsonNumbers.getString(i).equals(n.getNumber())) {
                   realm.beginTransaction();
                   n.setHasApp(true);
                   realm.commitTransaction();
               }
           }
        }
    }
} catch (NullPointerException e) {
    e.printStackTrace();
}

编辑1:

这是我使用的Dao功能:

public static ArrayList<ModelContact> getAllContactsSortedAsList() {
    return new ArrayList<>(getAllContactsSorted());
}

public static RealmResults<ModelContact> getAllContactsSorted(){
    return Realm.getDefaultInstance().where(ModelContact.class).findAllSorted(ModelContact.NAME_NORMALIZED, Sort.ASCENDING);
}

编辑2:

当我第一次打开应用程序,当应用程序从未在Realm中保存此模型数据时,这一切都发生了(请记住,当我收到错误时,我的ModelContact的Realm应包含数据,因为我已经在调用API之前保存了所有数据,并且一直发生,直到我重新启动应用程序。 一旦我重新启动应用程序,(现在我的ModelContact中的数据已经存在),一切正常。

0 个答案:

没有答案