[英]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.