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

问题描述 投票:0回答:1

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

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

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

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

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

进行查询并获取对象列表。截至服务器,返回的对象的值不同。object.getInt(“ abc”)返回122,而不是100期望值为100,因为已对创建的活动进行了新查询,并且未保存上次修改的parseobject。但是,即使在活动被破坏之后,parseobject的修改后的值仍会保存在本地。

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

字段不是静态的,并且未使用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>  
android parse-platform parse-server parse-sdk-android
1个回答
0
投票

经过一些研究,我发现如果启用了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()
© www.soinside.com 2019 - 2024. All rights reserved.