所以我在创建iOS版本后一直在构建我的应用程序的Android版本,我正在使用AWS DynamoDB作为我的数据库。我有一个列表项,并试图在其中保存嵌套对象。这是文档在数据库中的样子:
因为我知道这些是Map数据类型(当我将它们加载到应用程序时它们就是这样),我也尝试将它们保存为Map数据类型。以下是我的FriendsDO AWS表中的代码:
public class FriendsDO {
private String _userFriendsId;
private List<Map<String, AttributeValue>> _friendRequests;
@DynamoDBHashKey(attributeName = "userFriendsId")
@DynamoDBAttribute(attributeName = "userFriendsId")
public String getUserFriendsId() {
return _userFriendsId;
}
public void setUserFriendsId(final String _userFriendsId) {
this._userFriendsId = _userFriendsId;
}
@DynamoDBAttribute(attributeName = "friendRequests")
public List<Map<String, AttributeValue>> getFriendRequests() {
return _friendRequests;
}
public void setFriendRequests(final List<Map<String, AttributeValue>> _friendRequests) {
this._friendRequests = _friendRequests;
}
我拿出剩余的物品,使其更具可读性。以下代码行是我在尝试将新Map项目保存到List中时编写的。
FriendsDO friendsTblToUpdate = new FriendsDO();
List<Map<String, AttributeValue>> requestList = new ArrayList<Map<String, AttributeValue>>();
Map<String, AttributeValue> mapToSave = new HashMap<String, AttributeValue>();
mapToSave.put("friendID", new AttributeValue().withS(personId));
mapToSave.put("friendName", new AttributeValue().withS(personName));
mapToSave.put("friendUsername", new AttributeValue().withS(personUsername));
requestList.add(mapToSave);
friendTblToUpdate.setUserFriendsId(item.get("userFriendsId").getS());
friendTblToUpdate.setUserId(fbId);
friendTblToUpdate.setFriendRequests(requestList);
try {
objectMapper.save(friendTblToUpdate);
} catch (final AmazonClientException ex) {
ex.printTraceStack();
}
这是我收到的堆栈:
com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMappingException: Cannot marshall type class com.amazonaws.services.dynamodbv2.model.AttributeValue without a custom marshaler or @DynamoDBDocument annotation.
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.getObjectToMapMarshaller(ConversionSchemas.java:387)
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.augment(ConversionSchemas.java:317)
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.getMemberMarshaller(ConversionSchemas.java:300)
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.getMapToMapMarshaller(ConversionSchemas.java:369)
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.augment(ConversionSchemas.java:314)
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.getMemberMarshaller(ConversionSchemas.java:300)
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.getListToListMarshaller(ConversionSchemas.java:341)
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.augment(ConversionSchemas.java:310)
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.getMarshaller(ConversionSchemas.java:291)
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.convert(ConversionSchemas.java:257)
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper$SaveObjectHandler.execute(DynamoDBMapper.java:1044)
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.save(DynamoDBMapper.java:904)
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.save(DynamoDBMapper.java:688)
at com.treyherman.gifwrap.FindFBFriendsActivity$ViewHolder$2$1.run(FindFBFriendsActivity.java:362)
有人知道是否可以在Android DynamoDB中保存Map项目?在iOS中这么简单,我花了很多时间试图在Android中弄明白。谢谢你提前帮忙。
答案 0 :(得分:0)
想出答案,我只是在思考一切。我只需将friendRequests数据类型更改为:private List<Map<String, String>> _friendRequests;
然后我相应地调整了其余的代码。