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

时间:2015-04-05 17:03:56

标签: android parse-platform

我无法正确获取包含“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中的'data'和'name'字段后,如果在没有先前调用'onCreate()'的情况下调用'onResume()'(例如在锁定/解锁屏幕后),则日志显示'data'的旧值和'name'的新值。

这是一个简单的代码示例,用于突出我在更大的项目中遇到的问题。

这是Parse Android SDK的已知问题吗?有解决方法吗? 感谢

2 个答案:

答案 0 :(得分:0)

现在我了解到你已经打开了本地数据存储区,我可以得到一个至少部分答案。

打开本地数据存储区有一些副作用。一个是本地只存在每个对象的一个​​实例。因此,当您第二次致电fetchInBackground时,object已经填充了数据。然后(我认为)问题是API不再覆盖“复杂”类型(指针,对象,数组),可能是因为它可能会破坏数据存储中的内部关系。由于数据存储将以递归方式保存对象(和指针),因此突然交换指针可能会使对象“挂起”。 (再次,只是猜测)。

现在我必须承认,它仍然让我有点看着你的代码,因为你似乎没有在任何时候将你的对象写入数据存储,但是..

在“刷新”它之前,应该解除对象的作用:

object.unpinInBackground.onSuccess(new Continuation<>{
    ...
    // when done call fetch
});

答案 1 :(得分:0)

根据Parse的说法,这是一个他们现在无法解决的已知问题:https://developers.facebook.com/bugs/1624269784474093/

我们必须使用以下方法从ParseObject中检索JSON对象/数组字段:

  • getMap()而不是getJSONObject()
  • getList()而不是getJSONArray()

这些方法将分别返回Map和List对象。 我发现在我的项目中管理Map和List而不是JSONObjet和JSONArray不是问题,甚至更清晰。