Android 解析嵌套查询
好的,我已经被困在这个问题上好几个星期了,很抱歉问了这么长的问题 使用Parse,为Android制作一个训练应用程序 与我的问题相关的数据库表和列包括: 练习 ID |名称|描述|肌肉群 运动 ID | workoutName | userID WorkoutExercises基本上是两者之间的联接表 ID | workUtid指针| exerciseID指针 因此,用户将能够创建训练并添加他们想要的训练 到目前为止,我已经完成了: 用户可以进入类别,浏览肌肉组,查看该组中的练习 注册/登录/注销,更新配置文件 列出当前的训练,而不是其中的练习- 我刚刚在db上的训练中输入了一些练习,因为在担心插入新练习之前,我一直在查询该训练中的当前练习。 问题是: 我正在尝试进行嵌套查询,以获取练习名称,因此一旦用户单击(例如,Back Workout),它将显示一个列表(例如,Deadlift、Rows、China ups) 因此,基本上在SQL中,我想: 选择名称 从练习中 其中ID在从workoutexercises中选择exerciseID,其中WorkoutID=xxxx 我正在努力的事情: 对指针进行嵌套查询,根据我在网上读到的内容,我需要使用query.includeexeciseid;这将告诉Parse包含一个完整的练习项,然后我可以使用它进行查询?如果我错了,请纠正我?下面的代码-我做得正确吗 我从中学习并使用了以下方法:将查询数据放入列出数据的自定义适配器中。它使用getter 和setter来保存/检索String/int值,我是否仍然使用getter从指针中获取字符串 例如 就像在一次我通过那个指针,在练习表中,我假设我仍然只是得到字符串名称值,而不是得到一个ParseObject 现在到目前为止,我已经能够让自定义适配器在屏幕上放置2个水平条,显示它知道我在WorkoutExchanges中放置了3个项目,但只是没有从嵌套查询中调出我需要的来自练习名称的文本 看看我的截图,看看我的意思 非常感谢您事先的帮助 到目前为止的查询:Android 解析嵌套查询,android,parse-platform,nested-query,Android,Parse Platform,Nested Query,好的,我已经被困在这个问题上好几个星期了,很抱歉问了这么长的问题 使用Parse,为Android制作一个训练应用程序 与我的问题相关的数据库表和列包括: 练习 ID |名称|描述|肌肉群 运动 ID | workoutName | userID WorkoutExercises基本上是两者之间的联接表 ID | workUtid指针| exerciseID指针 因此,用户将能够创建训练并添加他们想要的训练 到目前为止,我已经完成了: 用户可以进入类别,浏览肌肉组,查看该组中的练习 注册/登录/
public void getcurrentExercisesInWorkout() {
//set progress bar
setProgressBarIndeterminateVisibility(true);
ParseQuery<WorkoutExercises> query = ParseQuery.getQuery("WorkoutExercises");
query.include("exerciseId");
query.whereEqualTo("workoutId", mWorkoutId);
query.findInBackground(new FindCallback<WorkoutExercises>() {
@Override
public void done(List<WorkoutExercises> workoutExercises, ParseException error) {
if (workoutExercises != null) {
mWorkoutExercisesAdapter.clear();
mWorkoutExercisesAdapter.addAll(workoutExercises);
} else {
Log.d("error", error.getMessage());
}
}
});
//stop progress bar
setProgressBarIndeterminateVisibility(false);
}
在调试模式下运行Android Studio,我可以看到我试图输入文本字段的数据。请看屏幕截图-我如何获取该值?请参见下面的屏幕截图
现在工作-结果
首先,更改WorkoutExercises对象:
@ParseClassName("WorkoutExercises")
public class WorkoutExercises extends ParseObject {
//public String exName;
public static final String workoutID = "workoutID"
public static final String exerciseID = "exerciseID"
public Exercises getWorkoutExercise() {
return (Exercises)getParseObject(exerciseID);
}
public WorkoutExercises()
{
// not sure if it is allowed to define your own constructor?
// just a note
}
// WorkoutExercises does not have a 'name' col
//public String getWorkoutExercise()
//{
// return getString("name");
//}
}
// workoutExercises returned from a query including workoutID
Exercises exercise = workoutExercises.getWorkoutExercise();
String name = exercise.getName();
// if Exercises has getters for description and Musclegroup
String description = exercise.getDescription();
String musclegroup= exercise.getMusclegroup();
我假设练习至少包含以下内容:
@ParseClassName("Exercises")
public class Exercises extends ParseObject {
public static final String name = "name"
public String getName()
{
return getString(name);
}
}
现在,使用包含workoutID的WorkoutExercises查询,将在获取的查询中填充Exercises对象。这意味着您可以执行以下操作以获取练习对象的名称:
@ParseClassName("WorkoutExercises")
public class WorkoutExercises extends ParseObject {
//public String exName;
public static final String workoutID = "workoutID"
public static final String exerciseID = "exerciseID"
public Exercises getWorkoutExercise() {
return (Exercises)getParseObject(exerciseID);
}
public WorkoutExercises()
{
// not sure if it is allowed to define your own constructor?
// just a note
}
// WorkoutExercises does not have a 'name' col
//public String getWorkoutExercise()
//{
// return getString("name");
//}
}
// workoutExercises returned from a query including workoutID
Exercises exercise = workoutExercises.getWorkoutExercise();
String name = exercise.getName();
// if Exercises has getters for description and Musclegroup
String description = exercise.getDescription();
String musclegroup= exercise.getMusclegroup();
希望这能对问题有所帮助请提供workoutexercise的实现。getWorkoutExerciseSure,添加在屏幕截图上方。谢谢如果我理解正确,您只需执行以下操作:nameView.setTextExercisesworkoutExercises.getWorkoutExercise.getName;假设您有一个练习子类,就像您在WorkoutExchanges中看到的那样,否则为nameView.SetTextWorkoutExchanges.GetWorkoutExchange.get'name';。后者在任何情况下都应该起作用,因为包含的指针总是解析为ParseObject子类extend ParseObject,所以调用getnameOfKey和putkey时,应该始终支持value;关于您的查询的一个小评论:setProgressBarIndeterminateVisibilityfalse;应该在done函数中,以便在查询返回结果时删除进度指示器。噢,我的天哪!你这个传奇人物!我无法表达我有多高兴。太完美了!绝对有效。我真是欣喜若狂!非常感谢你的帮助,我知道这是一个很长的问题。此外,我移动了progressbar指示器,正如您所说,在查询完成后停止旋转-之前从未走那么远,所以这太棒了!等不及今晚回家继续编码了!在问题的最底部添加了一个屏幕截图,向您展示结果:呵呵,我很高兴我能提供帮助;快乐编码。顺便说一句,您似乎已经创建了自己的适配器来显示结果,只是想让您知道,parse.com上的家伙也制作了一个:。我建议您查看一下它,因为它“隐藏”了查询,并允许您访问诸如onload和onload之类的回调,这使得添加加载指示器变得很容易。非常好。谢谢,我不知道。是的,我有一个自定义适配器。将有一本关于Parse的书。@cYrixmorten我可以向您寻求帮助吗:
// workoutExercises returned from a query including workoutID
Exercises exercise = workoutExercises.getWorkoutExercise();
String name = exercise.getName();
// if Exercises has getters for description and Musclegroup
String description = exercise.getDescription();
String musclegroup= exercise.getMusclegroup();