You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android端如何用Java通过AWS Amplify从DynamoDB获取最新数据

获取AWS Amplify DataStore最新数据的正确实现(Android)

针对你要获取最新数据的需求,用Amplify Android DataStore的正确写法是通过Where类的链式调用构建查询条件,结合排序和限制返回数量——你尝试的QueryOptions.builder()在新版Amplify中已被调整,不再适用。

下面是适配你场景的完整代码:

public void readLatestData() {
    Amplify.DataStore.query(
            MyModel.class,
            Where.matchesAll()
                    .sort(MyModel.TIMESTAMP, SortOrder.DESCENDING)
                    .limit(1),
            items -> {
                if (items.hasNext()) {
                    MyModel latestItem = items.next();
                    retrievedItem = latestItem.getName().toString();
                    Log.i("Amplify", "Latest data - Id: " + latestItem.getId() + ", Name: " + latestItem.getName() + ", Timestamp: " + latestItem.getTimestamp());
                } else {
                    Log.i("Amplify", "No data found in DataStore");
                }
            },
            failure -> Log.e("Amplify", "Failed to query latest data", failure)
    );
}

关键说明:

  • Where.matchesAll():匹配表中所有数据,作为查询的基础条件
  • .sort(MyModel.TIMESTAMP, SortOrder.DESCENDING):按你定义的时间戳字段降序排列,最新的数据会排在第一位
  • .limit(1):只返回排序后的第一条数据,也就是最新的那条
  • 结果处理时先判断items.hasNext(),避免空指针异常

为什么你的尝试代码报错?

新版Amplify Android DataStore已将排序、限制等条件整合到Where类的链式API中,和你现有readById方法用的Where.id(objectId)属于同一套体系,写法更统一,旧版的QueryOptions.builder()已被弃用或移除。

额外注意点:

确保你的MyModel类中,TIMESTAMP字段是正确定义的,比如用Amplify注解生成带时间戳的字段,或传感器上传数据时正确写入时间戳值,否则排序会失效。示例模型定义:

@Model
public class MyModel {
    @Id
    private String id;
    private String name;
    @Timestamp
    private Temporal.Timestamp timestamp;

    // 构造方法、getter、setter省略
}

内容的提问来源于stack exchange,提问作者user15849197

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 07:45:29