Need to configure your backend?See Build a Backend →
アプリケーションデータの読み取り
アイテムをクエリする
変更を実行できたので、出力されたIDを使用してクエリを実行してデータを取得します。
private void getTodo(String id) { Amplify.API.query( ModelQuery.get(Todo.class, id), response -> Log.i("MyAmplifyApp", ((Todo) response.getData()).getName()), error -> Log.e("MyAmplifyApp", error.toString(), error) );}private fun getTodo(id: String) { Amplify.API.query(ModelQuery.get(Todo::class.java, id), { Log.i("MyAmplifyApp", "Query results = ${(it.data as Todo).name}") }, { Log.e("MyAmplifyApp", "Query failed", it) } );}suspend fun getTodo(id: String) { try { val response = Amplify.API.query(ModelQuery.get(Todo::class.java, id)) Log.i("MyAmplifyApp", response.data.name) } catch (error: ApiException) { Log.e("MyAmplifyApp", "Query failed", error) }}private void getTodo(String id) { RxAmplify.API.query(ModelQuery.get(Todo.class, id)) .subscribe( response -> Log.i("MyAmplifyApp", ((Todo) response.getData()).getName()), error -> Log.e("MyAmplifyApp", error.toString(), error) );}アイテムをリストする
Amplify.API.queryで指定した条件に一致するアイテムのリストを取得できます:
Amplify.API.query( ModelQuery.list(Todo.class, Todo.NAME.contains("first")), response -> { for (Todo todo : response.getData()) { Log.i("MyAmplifyApp", todo.getName()); } }, error -> Log.e("MyAmplifyApp", "Query failure", error));Amplify.API.query( ModelQuery.list(Todo::class.java, Todo.NAME.contains("first")), { response -> response.data.forEach { todo -> Log.i("MyAmplifyApp", todo.name) } }, { Log.e("MyAmplifyApp", "Query failure", it) })try { Amplify.API .query(ModelQuery.list(Todo::class.java, Todo.NAME.contains("first"))) .response.data .items.forEach { todo -> Log.i("MyAmplifyApp", todo.name) }} catch (error: ApiException) { Log.e("MyAmplifyApp", "Query failure", error)}RxAmplify.API.query(ModelQuery.list(Todo.class, Todo.NAME.contains("first")) .subscribe( response -> { for (Todo todo : response.getData()) { Log.i("MyAmplifyApp", todo.getName()); } }, error -> Log.e("MyAmplifyApp", "Query failure", error) ));注: このアプローチは最初の1,000アイテムまでしか返しません。この制限を変更するか、この制限を超える追加結果のリクエストを行うには、以下で説明されているページネーションを使用してください。
後続ページのアイテムをリストする
リストクエリはデフォルトで最初の1,000アイテムのみを返すため、大規模なデータセットの場合、結果をページネーションする必要があります。ページの結果を受け取った後、さらに結果が利用可能な場合は、次のページをリクエストするためのGraphQLRequestを取得できます。ページサイズも設定可能です。以下の例をご覧ください。
public void queryFirstPage() { query(ModelQuery.list(Todo.class, ModelPagination.limit(1_000)));}
private static void query(GraphQLRequest<PaginatedResult<Todo>> request) { Amplify.API.query( request, response -> { if (response.hasData()) { for (Todo todo : response.getData()) { Log.d("MyAmplifyApp", todo.getName()); } if (response.getData().hasNextResult()) { query(response.getData().getRequestForNextResult()); } } }, failure -> Log.e("MyAmplifyApp", "Query failed.", failure) );}fun queryFirstPage() { query(ModelQuery.list(Todo::class.java, ModelPagination.limit(1_000)))}
fun query(request: GraphQLRequest<PaginatedResult<Todo>>) { Amplify.API.query(request, { response -> if (response.hasData()) { response.data.items.forEach { todo -> Log.d("MyAmplifyApp", todo.name) } if (response.data.hasNextResult()) { query(response.data.requestForNextResult) } } }, { Log.e("MyAmplifyApp", "Query failed", it) } )}suspend fun queryFirstPage() { query(ModelQuery.list(Todo::class.java, ModelPagination.firstPage().withLimit(1_000)))}
suspend fun query(request: GraphQLRequest<PaginatedResult<Todo>>) { try { val response = Amplify.API.query(request) response.data.items.forEach { todo -> Log.d("MyAmplifyApp", todo.name) } if (response.data.hasNextResult()) { query(response.data.requestForNextResult) } } catch (error: ApiException) { Log.e("MyAmplifyApp", "Query failed.", error) }}BehaviorSubject<GraphQLRequest<PaginatedResult<Todo>>> subject = BehaviorSubject.createDefault(ModelQuery.list(Todo.class, ModelPagination.limit(1_000)));subject.concatMap(request -> RxAmplify.API.query(request).toObservable()) .doOnNext(response -> { if (response.hasErrors()) { subject.onError(new Exception(String.format("Query failed: %s", response.getErrors()))); } else if (!response.hasData()) { subject.onError(new Exception("Empty response from AppSync.")); } else if(response.getData().hasNextResult()) { subject.onNext(response.getData().getRequestForNextResult()); } else { subject.onComplete(); } }) .concatMapIterable(GraphQLResponse::getData) .subscribe( todo -> Log.d(TAG, "Todo: " + todo), error -> Log.e(TAG, "Error: " + error) );