[英]How to fetch object and array fields with Parse?
我无法正确获取包含'Object'类型的字段的ParseObject:在Parse DataBrowser中手动更改'Object'字段值,然后从应用程序获取ParseObject之后,获取的ParseObject仍为该值提供旧值“对象”字段,但为“字符串”字段提供正确的新值。
这是我使用的示例代码:
public class MainActivity extends ActionBarActivity {
ParseObject object;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
object = ParseObject.createWithoutData("Test", "tvgTg8jAXz");
}
@Override
protected void onResume() {
super.onResume();
object.fetchInBackground().onSuccess(new Continuation<ParseObject, Object>() {
@Override
public Object then(Task<ParseObject> task) throws Exception {
JSONObject data = task.getResult().getJSONObject("data");
String name = task.getResult().getString("name");
Log.d("OBJECT", data.toString());
Log.d("OBJECT", name);
return null;
}
}).continueWith(new Continuation<Object, Object>() {
@Override
public Object then(Task<Object> task) throws Exception {
if (task.getError() != null) {
Log.e("OBJECT", task.getError().getLocalizedMessage());
}
return null;
}
});
}
}
在我更改了DataBrowser中的“数据”和“名称”字段之后,如果调用了“ onResume()”而没有先前对“ onCreate()”的调用(例如,在锁定/解锁屏幕之后),则日志显示旧值表示“数据”,新值表示“名称”。
这是一个简单的代码示例,突出显示我在较大项目中遇到的问题。
这是Parse Android SDK的已知问题吗? 有解决方法吗? 谢谢
现在,我了解到您已经打开了本地数据存储,然后可以得到一个至少是部分答案。
打开本地数据存储有一些副作用。 一个原因是每个对象只有一个实例存在于本地。 因此,当您第二次调用fetchInBackground
时, object
已经填充了数据。 当时的问题(我认为)是API不再覆盖“复杂”类型(指针,对象,数组),这可能是因为它可能破坏数据存储中的内部关系。 由于数据存储将递归保存对象(和指针),因此突然交换指针可能会使对象“挂起”。 (再次,仅是猜测)。
现在,我必须承认,它仍然使我对您的代码有些困惑,因为但是似乎您在任何时候都没有将对象写入数据存储中。
应该起作用的是在“刷新”之前取消固定对象:
object.unpinInBackground.onSuccess(new Continuation<>{
...
// when done call fetch
});
根据Parse的说法,这是一个已知问题,它们暂时无法解决: https : //developers.facebook.com/bugs/1624269784474093/
我们必须使用以下方法从ParseObject检索JSON对象/数组字段:
这些方法将分别返回Map和List对象。 我发现在我的项目中管理Map和List而不是JSONObjet和JSONArray不是问题,甚至更清楚。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.