Значение ParseObject сохраняется даже после уничтожения активности - PullRequest
0 голосов
/ 16 января 2020

Я запускаю действие, передающее анализируемый объект следующему действию

В следующем задании я делаю запрос и сохраняю список объектов как переменную поля класса. Я изменяю некоторые поля объектов из результата запроса. например, object.putint ("ab c", 122); // Я изменяю его со 100 на 122

Я НЕ вызываю save () или любой подобный метод для этих измененных объектов.

Теперь я заканчиваю sh второе действие с кнопкой "Назад" и go вернуться к первому действию.

Я снова запускаю второе действие, как и раньше

Запрос выполнен, и список объектов получен. Не возвращаемые объекты имеют разные значения, как у сервера. object.getInt ("ab c") возвращает 122, а не 100 100 - ожидаемое значение, так как был создан новый запрос для созданного действия, а измененный объект parseobject с прошлого раза не был сохранен. Но измененное значение parseobject все еще сохраняется локально даже после уничтожения действия.

Чтобы проверить в ondestroy второго действия, я установил значение объекта на 9999 и после перезапуска этого действия и выполнения запроса значение, возвращенное в сетевом журнале (100) не совпадает со значением, напечатанным позже через журнал.

Поле не указано c и localdatastore не используется.

РЕДАКТИРОВАТЬ:

Activity 1:

...
intent.putExtra("obj",myOrderParseObject);
startActivity...


Activity 2:

...
somequery.whereEqualTo("someField",getIntent.get...("obj");
List<Type2ParseObject> result = somequery.find();
...

result.get(0).getInt("myvalue") //return 100
result.get(0).put("myvalue",50)
finish();

Back to Activity 1:
...
intent.putExtra("obj",myOrderParseObject);
startActivity...    //Again start activity 

Activity 2:

//Again the same query
...
somequery.whereEqualTo("someField",getIntent.get...("obj");
List<Type2ParseObject> result = somequery.find();
...

result.get(0).getInt("myvalue") //returns 50 not 100!!!

I expected 100 as it is original server value but i got 50 which i put last time but not called any save() method.

How did the value persisted even after activity crash>  

1 Ответ

0 голосов
/ 19 января 2020

После некоторых исследований я обнаружил, что если LocalDataStore включен и элемент закреплен. Затем, если элемент изменяется с помощью методов put, таких как item.put (somefield, 1020); тогда item.save () не требуется.

Закрепленный элемент обновляется автоматически без повторного вызова метода сохранения или закрепления.

В моем случае в упражнении 2 я изменял объект, но не вызывая save () или pin (), но все же значение элемента было обновлено и сохранено в localDataStore.

Такое поведение проблематично c, потому что иногда вы изменяете ParseObjects и вызываете save (), когда пользователь нажимает подтвердить кнопка. Если кнопка не нажата и приложение закрыто, то изменения не будут сохраняться, но здесь они сохраняются при каждом вызове put ().

Это мой опыт работы с LocalDataStore.

Решения для меня были: 1. вместо

   object.put("price",newValue);

я использую

   object.put("temp_price",newValue);

и позже, когда пользователь нажимает подтвердить

вместо

   object.save() //Saving the object on server,when online

я использую

 object.put("price",object.getInt("temp_price"))
   object.save()
...