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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用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中的'data'和'name'字段之后,如果在没有先前调用'onCreate()'的情况下调用'onResume()'(例如在锁定/解锁屏幕之后),则日志显示旧值'data'和'name'的新值。

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

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

答案

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

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

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

在“刷新”它之前,应该解决对象的问题:

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

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

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

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

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

以上是关于如何使用Parse获取对象和数组字段?的主要内容,如果未能解决你的问题,请参考以下文章

parse.com - 如何使用 PHP SDK 从 parse.com 查询和获取类似数组的 json?

使用 Parse SDK 保存新对象时如何获取 createdAt 属性?

如何在mongodb的对象数组中获取指定字段的值

如何从两个数组中获取对象? [关闭]

如何从片段中的 JSON 响应中的对象获取数据

如何定位 Prisma 中的字段并获取平面值数组而不是对象数组