2017-08-15 80 views
1

我有問題了解如何從我的Android應用程序爲dynamoDB創建列表。 我可以從我的應用程序中存儲和加載{ "deviceId": "920e185a-63ed-46ca-bfca-f7a484ccb708" }。但是,然後添加List並將我的JSON對象存儲爲List中的Map是我掙扎。DynamoDB列表類型

的dynamoDB結構我要創建和填充看起來像這樣的JSON格式:

{ "data": [ { "heartBeatId": 1, "status": 1, "timeStamp": 1502183502711 }, { "heartBeatId": 2, "status": 1, "timeStamp": 1502183502812 } ], "deviceId": "90563daa-63ae-40c5-905e-9e8c02f9624f" } 然後我想填充心跳對象,它是地圖類型的數據列表。 { "heartBeatId": 2, "status": 1, "timeStamp": 1502183502812 } 所以即時通過定義@DynamoDBTable(tableName = "heartbeat")類來創建此結構時遇到問題。

我一直在閱讀有關列表和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; 
} 
} 

回答

2

地圖對象的列表可以創建如下。上述結構中的好處在於,data中的所有屬性都是數字。如果需要,您也可以將其更改爲字符串。根據您的預期產出,我已將其定義爲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); 

示例輸出: -

enter image description here

+0

這適用於創建我需要的結構。非常感謝。但我還沒有明白如何添加一個新的對象到列表中。這樣我每次都覆蓋它.save() – Daniel

+0

好。 OP正在要求樣本創建結構。我希望答案能夠解決這個問題。如果您想要更新數據,則可以使用低級API而不是映射器來防止更新所有出現的列表屬性。 – notionquest

+0

再次感謝您的幫助。我已經接受了這個答案。 – Daniel