1

我开始使用 Amplify 框架,我正在关注AWS 博客中的使用 AWS Amplify 构建 Android 应用程序 – 第 1 部分。那里使用的代码似乎已经过时(2018 年),因为 Amplify 库中没有类似的代码。

我被困在需要显示RecyclerView项目的部分。在那篇文章中,你可以得到这样的项目:

response.data().listPets().items()

但是,在当前文档中,有一个response.getData()方法可以返回一个Iterator<T>,您可以循环访问该方法。

我想要的是让 aList<T>来喂 a RecyclerView.Adapter

请指教。

4

2 回答 2

1

我使用 RxAmplify 和一个内部使用 rxJava 的示例 todo 应用程序来跟踪 Amplify 中的最新实现。所以我使用下面的代码来查询数据存储并获取可用于更新 recyclerview 适配器的值列表。这

列表()

部分将查询结果转换为可以在适配器中使用的列表。

RxAmplify.DataStore.query(Todo.class)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .toList()
            .subscribe(todolist->{
                adapter.updateList(todolist);
                adapter.notifyDataSetChanged();
            });

那个部分

.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread())

很重要,否则您将无法访问 UI,并且会引发异常。

于 2021-06-27T16:01:32.960 回答
0

AppSync SDK 与 Amplify Android?

2018 年的那篇博客是在考虑AWS Android AppSync SDK的情况下编写的。AppSync SDK 上的自述文件包括有关从模式文件生成代码的说明。如果您继续关注 2018 年的博客,我会用该文档补充您的练习。

今年,AWS 的公共文档已更新,以将客户指向新的Amplify Android 库。Amplify CLI ( amplify) 也已更新,可与 Amplify Android 库一起使用。Amplify CLI 当前将生成可供 Amplify Android APIDataStore类别使用的 Java 代码。

TLDR,如果您刚刚开始,我会从AWS Amplify Android 文档的教程部分开始工作。

您还可以在此处关注有关 AppSync 的更新(2020 年 5 月)博客文章

Iterator<T>RecyclerView.Adapater

有很多方法可以将结果传递给适配器,它们的复杂程度各不相同。

最直接的方法是这样的:

首先,用List<SomeModel>. List<SomeModel>可以在您创建后更新ItemAdapter,按设计:

final class ItemAdapter implements RecyclerView.Adapter<ItemHolder> {
    private final List<SomeModel> data;

    ItemAdapter(List<SomeModel> data) {
        this.data = data;
    }
}

然后,在 Amplify 回调中,更新List,并通知适配器数据集已更改:

List<SomeModel> models = new ArrayList<>();
ItemAdapter adapter = new ItemAdapter(models);
Amplify.API.query(SomeModel.class,
    iterator -> {
        if (!iterator.hasNext()) return;
        models.clear();
        while (iterator.hasNext()) {
            models.add(iterator.next());
        }
        adapter.notifyDataSetChanged();
    },
    failure -> {
        // As an exercise: display an
        // error item into the RecyclerView.
    }
);
于 2020-06-09T19:39:46.127 回答