【问题标题】:DynamoDB List typeDynamoDB 列表类型
【发布时间】:2017-08-15 15:11:53
【问题描述】:

我在理解如何从我的 Android 应用程序中为 dynamoDB 创建列表时遇到问题。 我可以从我的应用程序中存储和加载{ "deviceId": "920e185a-63ed-46ca-bfca-f7a484ccb708" }。但是后来添加 List 并将我的 JSON 对象作为 Map 存储在 List 中是我的挣扎。

我要创建和填充的 dynamoDB 结构在 JSON 格式中如下所示:

{ "data": [ { "heartBeatId": 1, "status": 1, "timeStamp": 1502183502711 }, { "heartBeatId": 2, "status": 1, "timeStamp": 1502183502812 } ], "deviceId": "90563daa-63ae-40c5-905e-9e8c02f9624f" } 然后我想用 Map 类型的心跳对象填充数据列表。 { "heartBeatId": 2, "status": 1, "timeStamp": 1502183502812 } 所以我在定义 @DynamoDBTable(tableName = "heartbeat") 类来创建这个结构时遇到了问题。

我一直在这里阅读有关 List 和 DynamoDBDocument 的信息:

DynamoDBDocument

DataType List

@DynamoDBTable(tableName = "heartbeat") 类现在的样子。

我希望有人可以帮我定义它或给我线索,告诉我如何继续获得我需要的结构。

package com.example.android.awsdynamoapp;

import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBAttribute;
import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBDocument;
import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBHashKey;
import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBTable;

import java.lang.annotation.Annotation;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@DynamoDBTable(tableName = "heartbeat")
public class HeartBeat implements DynamoDBTable {

private String deviceId;
private Map<String, Integer> data;
private List dataList;

public HeartBeat(){};
public HeartBeat(String deviceId){this.deviceId = deviceId;};

public HeartBeat(String deviceId, List dataList) {
    this.deviceId = deviceId;
    this.dataList = dataList;
  //  this.timeStamp = timeStamp;
}

@DynamoDBHashKey(attributeName = "deviceId")
public String getDeviceId() {
    return deviceId;
}

public void setDeviceId(String deviceId) {
    this.deviceId = deviceId;
}
public void setTimeStamp(String timeStamp) {
    //this.timeStamp = timeStamp;
}


public void setData(String deviceId) {
    Map<String, Integer> data = new HashMap<>();

}

@DynamoDBAttribute(attributeName = "data")
public List getData() {
    return this.dataList;
}

@DynamoDBDocument
public static class JsonArray {
    private String heartBeatId;
    private String status;
    private String timeStamp;

}

/**
 * The name of the table to use for this class.
 */
@Override
public String tableName() {
    return "heartbeat";
}

@Override
public Class<? extends Annotation> annotationType() {
    return null;
}
}

【问题讨论】:

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


    【解决方案1】:

    可以如下创建地图对象列表。上述结构的好处是data 中的所有属性都是一个数字。如果需要,您也可以将其更改为 String。根据您的预期输出,我将其定义为Long

    属性定义:-

    private List<Map<String, Long>> data;
    
    @DynamoDBAttribute(attributeName = "data")  
    public List<Map<String, Long>> getData() {
        return data;
    }
    
    public void setData(List<Map<String, Long>> data) {
        this.data = data;
    }
    

    填充数据:-

        MoviesWithData movies = new MoviesWithData();
        movies.setYearKey(1917);
        movies.setTitle("Tilte with list of map");
    
        Map<String, Long> dataMap1 = new HashMap<>();
        dataMap1.put("heartBeatId", 1L);
        dataMap1.put("status", 1L);
        dataMap1.put("timeStamp", 1502183502812L);
    
        Map<String, Long> dataMap2 = new HashMap<>();
        dataMap2.put("heartBeatId", 2L);
        dataMap2.put("status", 2L);
        dataMap2.put("timeStamp", 1503183502812L);
    
        movies.setData(Arrays.asList(dataMap1, dataMap2));
        dynamoDBMapper.save(movies, consistentDynamoDBMapperConfig);
    

    示例输出:-

    【讨论】:

    • 这可以很好地创建我需要的结构。非常感谢。但是我还不明白如何将新对象添加到列表中。这样我每次执行 .save() 时都会覆盖它
    • 好。 OP 要求提供样本来创建结构。我希望答案能解决这个问题。如果您想更新数据,可以使用低级 API 而不是 mapper 来防止更新所有出现的列表属性。
    猜你喜欢
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 2019-11-11
    • 1970-01-01
    相关资源
    最近更新 更多