DynamoDB 列表类型

Dan*_*iel 2 android list amazon-web-services amazon-dynamodb

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

我要创建和填充的 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 的信息:

动态数据库文档

数据类型列表

这如何 @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;
}
}
Run Code Online (Sandbox Code Playgroud)

not*_*est 5

可以按如下方式创建地图对象列表。上述结构的好处是所有的属性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;
}
Run Code Online (Sandbox Code Playgroud)

填充数据:-

    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);
Run Code Online (Sandbox Code Playgroud)

示例输出:-

在此处输入图片说明