長い質問で申し訳ありません。
Parseを使って、Android向けのワークアウトアプリを作っています。
私の問題に関連するデータベースのテーブルと列は次のとおりです。
演習
ID| 名前 | 説明 | 筋群
ワークアウト
ID| ワークアウト名| ユーザーID
WorkoutExercises (基本的に 2 つの結合テーブル)
ID| ワークアウト ID (ポインター) | エクササイズ ID (ポインター)
したがって、ユーザーはワークアウトを作成し、必要なエクササイズを追加できます。
これまでのところ、私はすでに行っています:
- ユーザーはカテゴリに移動し、筋肉グループを閲覧し、そのグループのエクササイズを表示できます
- サインアップ/ログイン/ログアウト、プロフィールの更新
- 現在のワークアウトをリストします (それらのエクササイズではありません) - 新しいワークアウトを挿入することを心配する前に、そのワークアウトで現在のエクササイズを照会することに行き詰まったため、db のワークアウトにいくつかのエクササイズを入力しました。
問題:
エクササイズ名を取得するためにネストされたクエリを実行しようとしているので、ユーザーがEgをクリックすると. Back Workout リストが表示されるはずです。デッドリフト、ロウ、チンアップ
だから基本的にSQLで私はしたい:
ID が含まれるエクササイズから名前を選択 (WorkoutID=xxxx のワークアウトエクササイズからエクササイズ ID を選択)
私が苦労していること:
ネットで読んだことから、ポインターのネストされたクエリを作成するには、query.include("exerciseID"); を使用する必要があります。クエリに使用できる完全な演習アイテムを含めるようにParseに指示するのはどれですか? 間違っていたら訂正しますか?以下のコード - 正しく実行しましたか?
私は次の方法から学び、使用しています: http://www.michaelevans.org/blog/2013/08/14/tutorial-building-an-android-to-do-list-app-using-parse/クエリ データは、データを一覧表示するカスタム アダプターに入れられます。ゲッターとセッターを使用して文字列/整数値を保存/取得しますが、ポインタ内から文字列を取得するためにゲッターを使用しますか?
例えば。
public String getName()
{
return getString("name");
}
かつてのように、私はそのポインターを「通過」しており、演習テーブルでは、ParseObject を取得するのではなく、まだ文字列名の値を取得していると仮定していますか?
これまでのところ、カスタム アダプターを取得して、画面全体に 2 つの水平バーを配置することができました。これは、workoutExercises に 3 つのアイテムを配置したことを示していますが、ネストされたクエリから必要なエクササイズ名のテキストを表示していないことを示しています。
私のスクリーンショットを見て、私が何を意味するかを確認してください。
事前に助けてくれてありがとう。
これまでのクエリ:
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);
}
カスタム リスト アダプタ:
//constructor - get current state of parsed object and list of objects retrieved from workout
public WorkoutExercisesAdapter(Context context, List<WorkoutExercises> objects) {
super(context, R.layout.row_item, objects);
this.mContext = context;
this.mWorkoutExercises = objects;
}
public View getView(int position, View convertView, ViewGroup parent)
{
//put each item into the listview
if(convertView == null)
{
LayoutInflater mLayoutInflater = LayoutInflater.from(mContext);
convertView = mLayoutInflater.inflate(R.layout.row_item,null);
}
WorkoutExercises workoutExercises = mWorkoutExercises.get(position);
TextView nameView = (TextView) convertView.findViewById(R.id.row_name);
//this just calls a String getter - which isn't working - need it to get the Exercise name from within the pointer
nameView.setText(workoutExercises.getWorkoutExercise());
return convertView;
}
WorkoutExercises (ゲッターを格納)
@ParseClassName("WorkoutExercises")
public class WorkoutExercises extends ParseObject {
public String exName;
public WorkoutExercises()
{
}
public String getWorkoutExercise()
{
return getString("name");
}
}
Android Studio をデバッグ モードで実行すると、テキスト フィールドに入力しようとしているデータを文字通り見ることができます (スクリーンショットを参照 - その値を取得するにはどうすればよいですか?以下のスクリーンショットを参照)
動作中 - 結果!