繁体   English   中英

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

[英]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对象/数组字段:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM