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

Android Kotlin中Amplify查询DynamoDB无结果问题排查求助

Android Amplify DataStore查询无执行无结果问题分析

问题场景

在Android应用中使用Kotlin通过Amplify查询DynamoDB数据,代码逻辑看似正常,但运行时查询回调未触发,无任何返回结果,查阅Amplify官方文档未找到原因。

相关代码

fun getUserData(email: String) {
    println("We will get the userdata!!!!!!!!")
    Amplify.DataStore.query(
        User::class.java,
        { items ->
            while (items.hasNext()) {
                val item = items.next()
                Log.i("Amplify", "Queried item: " + item.name)
            }
        },
        { failure -> Log.e("Tutorial", "Could not query DataStore", failure) }
    )
}

翻译后的运行日志

2023-04-21 19:41:19.981 16806-16893 TrafficStats            com.example.aupairconnect            D  标记Socket(119),statsTag=0xffffffff,statsUid=-1
2023-04-21 19:41:20.011 16806-16806 兼容性变更报告器        com.example.aupairconnect            D  已上报兼容变更ID:171228096;UID 10162;状态:已启用
2023-04-21 19:41:20.211 16806-16881 amplify:aws-datastore   com.example.aupairconnect            I  协调器锁已释放。
2023-04-21 19:41:20.211 16806-16881 MyAmplifyApp            com.example.aupairconnect            I  DataStore已启动
2023-04-21 19:41:20.531 16806-16887 e.aupairconnect         com.example.aupairconnect            W  长时间监视器竞争,所有者为pool-5-thread-1 (16886),位于void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action)(SubscriptionEndpoint.java:196),等待者数=0,持续时间562ms
2023-04-21 19:41:20.666 16806-16888 e.aupairconnect         com.example.aupairconnect            W  长时间监视器竞争,所有者为pool-5-thread-1 (16886),位于void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action)(SubscriptionEndpoint.java:196),等待者数=1,持续时间695ms
2023-04-21 19:41:20.793 16806-16880 amplify:aws-datastore   com.example.aupairconnect            I  已启动针对模型[User]的订阅处理器,类型为[ON_CREATE, ON_UPDATE, ON_DELETE]。
2023-04-21 19:41:20.801 16806-16893 TrafficStats            com.example.aupairconnect            D  标记Socket(120),statsTag=0xffffffff,statsUid=-1
2023-04-21 19:41:20.975 16806-16860 EGL_emulation           com.example.aupairconnect            D  app_time_stats: 平均值=73.29ms 最小值=0.58ms 最大值=656.79ms 计数=17
2023-04-21 19:41:21.041 16806-16806 OnBackInvokedCallback   com.example.aupairconnect            W  应用未启用OnBackInvokedCallback。请在应用清单中设置'android:enableOnBackInvokedCallback="true"'。
2023-04-21 19:41:21.060 16806-16904 amplify:aws-datastore   com.example.aupairconnect            I  已成功从云端同步模型状态。
2023-04-21 19:41:21.061 16806-16880 amplify:aws-datastore   com.example.aupairconnect            I  开始处理订阅数据缓冲区。
2023-04-21 19:41:21.061 16806-16880 amplify:aws-datastore   com.example.aupairconnect            I  已在API同步模式下启动协调器。
2023-04-21 19:41:21.061 16806-16879 amplify:aws-datastore   com.example.aupairconnect            I  开始处理突变待处理队列。待处理突变将发布到云端。
2023-04-21 19:41:21.068 16806-16806 System.out              com.example.aupairconnect            I  We will get the userdata!!!!!!!!
2023-04-21 19:41:21.068 16806-16806 amplify:aws-datastore   com.example.aupairconnect            I  已获取协调器锁。
2023-04-21 19:41:21.068 16806-16885 amplify:aws-datastore   com.example.aupairconnect            I  DataStore插件已初始化。
2023-04-21 19:41:21.074 16806-16806 System.out              com.example.aupairconnect            I  We will get the userdata!!!!!!!!
2023-04-21 19:41:21.321 16806-16885 amplify:aws-datastore   com.example.aupairconnect            I  协调器锁已释放。
2023-04-21 19:41:21.321 16806-16806 amplify:aws-datastore   com.example.aupairconnect            I  已获取协调器锁。
2023-04-21 19:41:21.322 16806-16882 amplify:aws-datastore   com.example.aupairconnect            I  DataStore插件已初始化。
2023-04-21 19:41:21.575 16806-16882 amplify:aws-datastore   com.example.aupairconnect            I  协调器锁已释放。
2023-04-21 19:41:24.656 16806-16911 ProfileInstaller        com.example.aupairconnect            D  正在为com.example.aupairconnect安装配置文件

原因分析

  1. DataStore未完全初始化:日志显示getUserData被调用时,DataStore插件仍在初始化过程中(后续出现两次"DataStore插件已初始化"),此时查询请求可能被阻塞或丢弃,无法触发回调。
  2. 重复初始化DataStore:日志中出现两次"DataStore插件已初始化",说明可能重复执行了Amplify/DataStore的初始化操作,导致插件状态异常,影响查询逻辑。
  3. 锁竞争阻塞:日志中有"长时间监视器竞争"的警告,DataStore的协调器锁被长时间占用,可能导致查询线程无法获取锁,无法执行查询逻辑。

解决方案

  • 等待DataStore就绪后再查询:监听DataStore的就绪状态,确认初始化完成后执行查询:
Amplify.DataStore.ready()
    .observeForever {
        getUserData("目标邮箱")
    }
  • 避免重复初始化:确保Amplify初始化代码只执行一次,比如放在Application的onCreate方法中,不要在多个页面或多次调用中重复初始化。
  • 排查锁竞争:检查应用中是否有其他长时间占用DataStore资源的操作(如批量同步、大量数据写入),优化这些操作的执行时机,避免与查询操作冲突。
  • 增强调试日志:在查询回调中添加更明确的日志输出,确认回调是否被触发:
Amplify.DataStore.query(
    User::class.java,
    { items ->
        Log.i("Amplify", "查询回调开始执行")
        while (items.hasNext()) {
            val item = items.next()
            Log.i("Amplify", "查询到数据: " + item.name)
        }
        Log.i("Amplify", "查询回调执行结束")
    },
    { failure -> 
        Log.e("Tutorial", "查询失败", failure) 
    }
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:28:10