ParseObject 值即使在活动被破坏后仍然存在

Posted

技术标签:

【中文标题】ParseObject 值即使在活动被破坏后仍然存在【英文标题】:ParseObject Value persisted even after activity destroyed 【发布时间】:2020-01-16 10:27:13 【问题描述】:

我启动了一个活动,将一个解析对象传递给下一个活动

在下一个活动中,我进行查询并将对象列表保存为类字段变量。 我从查询结果中更改了对象的某些字段。 例如 object.putint("abc",122); // 我把它从 100 改成 122

我不会对这些修改的对象调用 save() 或任何类似方法。

现在我用后退按钮完成第二个活动并返回第一个活动。

我再次像以前一样启动第二个活动

进行查询并获取对象列表。 不是返回的对象具有与服务器不同的值。 object.getInt("abc") 返回 122,而不是 100 100 是预期值,因为已对创建的活动进行了新查询,并且未保存上次修改的 parseobject。 但是 parseobject 修改后的值即使在activity销毁后仍然保存在本地。

验证 在第二个活动的 ondestroy 中,我将对象值设置为 9999 并在重新启动该活动并查询网络日志中返回的值 (100) 与稍后通过日志打印的值不匹配。

字段不是静态的,并且本地数据存储未在使用中。

编辑:

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】:

经过一番研究,我发现 如果 LocalDataStore 已启用并且项目已固定。 然后,如果使用 put 方法修改项目,例如 item.put(somefield,1020); 那么 item.save() 就不需要了。

固定的项目会自动更新,无需再次调用保存或固定方法。

在我的活动 2 中,我修改了对象,但没有调用 save() 或 pin(),但项目值仍然更新并保留在 localDataStore。

这种行为是有问题的,因为有时您修改 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()

【讨论】:

以上是关于ParseObject 值即使在活动被破坏后仍然存在的主要内容,如果未能解决你的问题,请参考以下文章

Android:调用相机意图后活动被破坏

Android:调用相机意图后活动被破坏

当Activity被销毁时,为什么Service会破坏自我?

没有创建 Firebase 应用“[DEFAULT]” - 即使调用 Firebase.InitializeApp(),错误仍然存​​在

如何使用Parse获取对象和数组字段?

通道被不可恢复地破坏并将被处理