在我的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数据库中,数据已正确保存,如下所示:
现在,在我的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;不起作用。
我怎样才能实现我想要做的事情?
答案 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());
}
}
});