无法在Android Kotlin中获取AWS DynamoDB的列表列

时间:2018-10-23 16:39:53

标签: android amazon-web-services kotlin amazon-dynamodb

我正在使用Kotlin和AWS DynamoDB开发一个Android应用程序。我是这两种技术的新手。我现在正在做的是尝试扫描DynamoDB表中的数据。我知道如何扫描。但是问题是该列之一具有List数据类型。

我有一个名为item的表,其中包含以下列。

enter image description here

请注意“图像”字段。

在Kotlin Android中,我像这样扫描表格。

val dynamoDBClient = AmazonDynamoDBClient(AWSMobileClient.getInstance().credentialsProvider)
            val fetchedItems: ArrayList<Any> = ArrayList();

            val scanRequest = ScanRequest().withTableName(MainApplication.DB_TABLE_ITEMS);
            scanRequest.exclusiveStartKey = lastEvaluatedKey

            val scanResult = dynamoDBClient.scan(scanRequest)
            scanResult.items.forEach { item ->
                Log.i("ITEM_NAME", item.get("Name")?.s)
                val viewItem = ItemDO()
                viewItem.id = item.get("Id")?.s
                viewItem.description = item.get("Description")?.s
                viewItem.name = item.get("Name")?.s
                viewItem.userId = item.get("UserId")?.s
                viewItem.images = item.get("Images")?.ns
                fetchedItems.add(viewItem)
                Log.i("IMAGES_COUNT", item.get("Images")?.ns?.size.toString())
            }

但是这个

item.get("Images")?.ns

即使该列中存在数据,也总是返回null,如下面的屏幕截图所示。

enter image description here

为什么我的代码没有获取列表数据类型,而是其他?我该如何解决?

1 个答案:

答案 0 :(得分:2)

代码看起来不错,并且应该返回所有属性的数据,而与它们的类型无关。我在Java中有等效的代码,可以按预期工作。您可以在进行空安全调用之前尝试检查item.get("Images")返回的值吗? item.get("Images")返回的值的类型为AttributeValue,因此在隐式类型转换过程中可能会丢失该值。