Android 解析 - table 指向其他 table 的指针,想要在其他 table 中检索 objects
Android Parse - table of pointers to other tables, want to retrieve objects in the other tables
我觉得我已经很接近这个了,只需要最后一点。
我有以下 tables:
_User(标准解析 table)
类别(object ID、名称)
练习(object ID、名称、描述、缩略图、图像等)
和用户收藏夹,这是我存储用户首选练习的地方
(objectId, user->users table, exercise->exercises table, category->category table)
我已经使用指针写入 Parse 了:
//create new parse object
ParseObject favouriteExercise = new ParseObject("UserFavourites");
//create pointers to the Exercise table and Category table
ParseObject exercise = ParseObject.createWithoutData("Exercises", mExerciseId);
ParseObject category = ParseObject.createWithoutData("Category", mCategoryId);
//put those pointers into the Userfavourites table and save
favouriteExercise.put("user",ParseUser.getCurrentUser());
favouriteExercise.put("exercise",exercise);
favouriteExercise.put("category",category);
//save
favouriteExercise.saveInBackground();
现在我正在尝试检索用户收藏的所有练习,并通过在 table 中搜索与用户指针匹配的任何 object 将它们放入列表视图table:
ParseQuery<Exercises> query = ParseQuery.getQuery("UserFavourites");
final ParseObject user = ParseObject.createWithoutData(ParseUser.class, ParseUser.getCurrentUser().getObjectId());
query.whereEqualTo("user", user);
//call to parse.com to start the query
query.findInBackground(new FindCallback<Exercises>() {
@Override
public void done(List<Exercises> exercises, ParseException e) {
if (exercises != null) {
Toast.makeText(getApplicationContext(), "Favourites found, can't list yet", Toast.LENGTH_SHORT).show();
mAdapter.clear();
//add all the exercises to the list
mAdapter.addAll(exercises);
//sort the list alphabetically
mAdapter.sort(new Comparator<Exercises>() {
@Override
public int compare(Exercises exercises, Exercises t1) {
return exercises.getName().compareTo(t1.getName());
}
});
} else {
mNoFavourites.setVisibility(View.VISIBLE);
}
我卡住的地方是当我 运行 时我可以看到我的查询正在运行 -> 我正在检索 UserFavourites 中我从 table 中最喜欢的 8 行中的 4 行,所以它过滤正确,但我得到的 objects 没有指向我想要的练习。它们只是空指针。
谢谢。
是的,它将 return 仅引用(指针)。如果你想要实际的对象数据调用 fetchInBackground
myObject.fetchInBackground(new GetCallback<ParseObject>() {
public void done(ParseObject object, ParseException e) {
if (e == null) {
// Success!
} else {
// Failure!
}
}
});
我是根据kishore jethava给出的逻辑想出来的。
我查询了收藏夹 table,然后得到我想要的结果(指向另一个 table)我循环遍历每个结果并得到它指向并添加的 object它到我的 ArrayList。
public void getFavourites() {
//set progress bar
setProgressBarIndeterminateVisibility(true);
ParseQuery<Exercises> query = ParseQuery.getQuery("UserFavourites");
final ParseObject user = ParseObject.createWithoutData(ParseUser.class, ParseUser.getCurrentUser().getObjectId());
query.whereEqualTo("user", user);
query.include("exercise");
//call to parse.com to start the query
query.findInBackground(new FindCallback<Exercises>() {
@Override
public void done(List<Exercises> objects, ParseException e) {
if (objects.size() != 0) {
for(ParseObject object : objects)
{
//for each pointer found, retrieve the object it points to
obj = object.getParseObject("exercise");
mAdapter.add((Exercises) obj);
}
});
}
} else {
mNoFavourites.setVisibility(View.VISIBLE);
}
//stop progress bar
setProgressBarIndeterminateVisibility(false);
}
});
}
我觉得我已经很接近这个了,只需要最后一点。
我有以下 tables:
_User(标准解析 table)
类别(object ID、名称)
练习(object ID、名称、描述、缩略图、图像等)
和用户收藏夹,这是我存储用户首选练习的地方
(objectId, user->users table, exercise->exercises table, category->category table)
我已经使用指针写入 Parse 了:
//create new parse object
ParseObject favouriteExercise = new ParseObject("UserFavourites");
//create pointers to the Exercise table and Category table
ParseObject exercise = ParseObject.createWithoutData("Exercises", mExerciseId);
ParseObject category = ParseObject.createWithoutData("Category", mCategoryId);
//put those pointers into the Userfavourites table and save
favouriteExercise.put("user",ParseUser.getCurrentUser());
favouriteExercise.put("exercise",exercise);
favouriteExercise.put("category",category);
//save
favouriteExercise.saveInBackground();
现在我正在尝试检索用户收藏的所有练习,并通过在 table 中搜索与用户指针匹配的任何 object 将它们放入列表视图table:
ParseQuery<Exercises> query = ParseQuery.getQuery("UserFavourites");
final ParseObject user = ParseObject.createWithoutData(ParseUser.class, ParseUser.getCurrentUser().getObjectId());
query.whereEqualTo("user", user);
//call to parse.com to start the query
query.findInBackground(new FindCallback<Exercises>() {
@Override
public void done(List<Exercises> exercises, ParseException e) {
if (exercises != null) {
Toast.makeText(getApplicationContext(), "Favourites found, can't list yet", Toast.LENGTH_SHORT).show();
mAdapter.clear();
//add all the exercises to the list
mAdapter.addAll(exercises);
//sort the list alphabetically
mAdapter.sort(new Comparator<Exercises>() {
@Override
public int compare(Exercises exercises, Exercises t1) {
return exercises.getName().compareTo(t1.getName());
}
});
} else {
mNoFavourites.setVisibility(View.VISIBLE);
}
我卡住的地方是当我 运行 时我可以看到我的查询正在运行 -> 我正在检索 UserFavourites 中我从 table 中最喜欢的 8 行中的 4 行,所以它过滤正确,但我得到的 objects 没有指向我想要的练习。它们只是空指针。
谢谢。
是的,它将 return 仅引用(指针)。如果你想要实际的对象数据调用 fetchInBackground
myObject.fetchInBackground(new GetCallback<ParseObject>() {
public void done(ParseObject object, ParseException e) {
if (e == null) {
// Success!
} else {
// Failure!
}
}
});
我是根据kishore jethava给出的逻辑想出来的。
我查询了收藏夹 table,然后得到我想要的结果(指向另一个 table)我循环遍历每个结果并得到它指向并添加的 object它到我的 ArrayList。
public void getFavourites() {
//set progress bar
setProgressBarIndeterminateVisibility(true);
ParseQuery<Exercises> query = ParseQuery.getQuery("UserFavourites");
final ParseObject user = ParseObject.createWithoutData(ParseUser.class, ParseUser.getCurrentUser().getObjectId());
query.whereEqualTo("user", user);
query.include("exercise");
//call to parse.com to start the query
query.findInBackground(new FindCallback<Exercises>() {
@Override
public void done(List<Exercises> objects, ParseException e) {
if (objects.size() != 0) {
for(ParseObject object : objects)
{
//for each pointer found, retrieve the object it points to
obj = object.getParseObject("exercise");
mAdapter.add((Exercises) obj);
}
});
}
} else {
mNoFavourites.setVisibility(View.VISIBLE);
}
//stop progress bar
setProgressBarIndeterminateVisibility(false);
}
});
}