java - 如何从 Android 更新 DynamoDB 中的项目?
问题描述
标题描述了三天来一直围绕着我的痛苦的问题。如何从 Android 应用程序更新存储在 DynamoDB 中的项目?
下面我留下了一个我已经检查并实施但结果不成功的链接列表:
1 - https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/examples-dynamodb-items.html 结果:它严格用于java ee,而不是android
2 - https://docs.aws.amazon.com/aws-mobile/latest/developerguide/add-aws-mobile-nosql-database.html#add-aws-mobile-nosql-database-crud-update 结果:创建即使“unique-user-id”参数显然是唯一的,但仍是一个新项目
3 - https://docs.aws.amazon.com/aws-mobile/latest/developerguide/how-to-nosql-integrate-an-existing-table.html 结果:同上,新建一个
4 - https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.CRUDExample1.html 结果:检索但创建一个新项目
解决方案
我做错的事情:-不包括我的对象中的排序(又名范围)键以进行更新。
其余的:首先,获取您的 DynamoDBClient,我强烈建议实现一个单例模式来调用它,在这种情况下我使用了 configuration.json:
AWSMobileClient.getInstance().initialize(NewPatientActivity.this).execute();
AWSCredentialsProvider credentialsProvider = AWSMobileClient.getInstance().getCredentialsProvider();
AWSConfiguration configuration = AWSMobileClient.getInstance().getConfiguration();
// Add code to instantiate a AmazonDynamoDBClient
AmazonDynamoDBClient dynamoDBClient = new AmazonDynamoDBClient(credentialsProvider);
然后像这样设置一个 UpdateItemRequest:
//SET THE KEYS VALUES
HashMap<String, AttributeValue> key = new HashMap<String, AttributeValue>();
key.put("your-partition-key", new AttributeValue().withS(value));
key.put("your-sort-key-if-exists", new AttributeValue().withS(value));
//SET VALUES TO REPLACE OLD ONES
Map<String, AttributeValue> expressionAttributeValues = new HashMap<String, AttributeValue>();
expressionAttributeValues.put(":val1",new AttributeValue().withN(value1));
expressionAttributeValues.put(":val2", new AttributeValue().withS(value2));
/*
IF YOU WANT TO READ THE JUST-UPDATED ITEM, HAVE THIS READY
ReturnValue returnValues = ReturnValue.ALL_NEW;
*/
//SET THE UPDATEITEMREQUEST
UpdateItemRequest updateItemRequest = new UpdateItemRequest()
.withTableName("your-table-name")
//KEYS DEFINED ABOVE
.withKey(key)
//SET WHERE TO UPDATE
.withUpdateExpression("set attr1 = :val1, attr2 = :val2")
.withExpressionAttributeValues(expressionAttributeValues)
//INDICATE TO RETURN UPDATED ITEM
.withReturnValues(returnValues);
//GET THE RESULT OF YOUR UPDATE AND EXECUTE IT
UpdateItemResult result = your-dynamo-client.updateItem(updateItemRequest);
//convert it to a string
Gson gson = new Gson();
String x = gson.toJson(result);
//Check it out
Log.e("RESULT :",x);
有关更多信息,我详细阐述了这个要点。
推荐阅读
- docker - 无法使用 IP 访问 docker 容器 Web 应用
- javascript - 来自 Safari 中 Axios 的网络错误,但不是 Chrome(Firefox 整个其他问题)
- python-3.x - 如果 Soup 在网站上找不到部分,如何给我发消息?每个不和谐或 idk
- sql - 过去 12 个月的数据总和,其中每个月有 2 行数据——Spark SQL
- python - 使用 pyinstaller 时找不到脚本
- c# - 如何在基于 Linux 的服务器上创建 Office 文档?
- wpf - 禁用 DataGrid 组标题的可折叠性
- javascript - 仅通过 WebAudio 节点播放视频标签音频
- android - Kotlin - 返回回调事件
- c# - DataGridView OnRowPostPaint 绘制