从Parse中检索数组

时间:2015-07-05 21:19:32

标签: java android parse-platform

在我的endWorkout.java文件中,我使用以下逻辑将数据保存到我的Parse数据库中:

// Parse Storage
        ParseObject testObject = new ParseObject("TestOne");
        testObject.put("Device", ParseInstallation.getCurrentInstallation());
        testObject.put("Reps", inputList);
        testObject.saveInBackground();

我首先存储我的设备ID以进行身份​​验证,然后存储inputList,它是一个整数的ArrayList。

在我的Parse数据库中,数据已正确保存,如下所示:

enter image description here

现在,在我的MainActivity.java中,我想检索单个设备的Parse数据库的Reps字段中的所有数据。例如,设备yhmrKgokfS在Parse数据库中有6个Arrays,我想顺序检索它们中的每一个以在屏幕上的ListView中显示。

以下是我尝试使用的逻辑:

List<ParseObject> importList = new ArrayList<ParseObject>();

//parse import list
        ParseQuery<ParseObject> query = ParseQuery.getQuery("TestOne");
        query.whereEqualTo("Device", ParseInstallation.getCurrentInstallation());
        query.findInBackground(new FindCallback<ParseObject>() {
            public void done(List<ParseObject> repList, ParseException e) {
                if (e == null) {
                    Log.d("Reps", "Retrieved " + repList.size() + " reps");
                } else {
                    Log.d("Reps", "Error: " + e.getMessage());
                }
            }
        });

        importList = repList;

我首先要确保从当前设备导入,因此我需要检查Device字段是否与ParseInstallation.getCurrentInstallation()匹配。然后我想继续前进并获得第一个Reps数组。但是最后一行importList = repList;不起作用。

我怎样才能实现我想要做的事情?

2 个答案:

答案 0 :(得分:1)

query.findInBackground以异步方式工作。换句话说,您设置importList的行在行query.findInBackground之后执行。但是,query.findInBackground将进行需要时间的网络调用。因此,如果您想在准备就绪时使用repList,则必须在完成网络调用的完成方法中使用它。希望这会有所帮助。

问候。

答案 1 :(得分:0)

正如@kinkspeech所提到的,你需要将你的行importList = repList;移到你的回调中。我建议您按如下方式进行更改:

query.findInBackground(new FindCallback<ParseObject>() {
        public void done(List<ParseObject> repList, ParseException e) {
            if (e == null) {
                Log.d("Reps", "Retrieved " + repList.size() + " reps");
                importList.addAll(replist);
            } else {
                Log.d("Reps", "Error: " + e.getMessage());
            }
        }
    });