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
相关产品推荐
相关产品推荐

