Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法将多个对象保存到DynamoDB?_Java_Android_Amazon Web Services_Amazon Dynamodb - Fatal编程技术网

Java 无法将多个对象保存到DynamoDB?

Java 无法将多个对象保存到DynamoDB?,java,android,amazon-web-services,amazon-dynamodb,Java,Android,Amazon Web Services,Amazon Dynamodb,我试图通过一个服务向DynamoDB数据库中添加多个条目,但是当代码执行时,只保存一个条目。这就是我到目前为止所做的: public int onStartCommand(Intent intent, int flags, int startId) { CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider( getApplicat

我试图通过一个服务向DynamoDB数据库中添加多个条目,但是当代码执行时,只保存一个条目。这就是我到目前为止所做的:

public int onStartCommand(Intent intent, int flags, int startId) {

    CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
            getApplicationContext(), // Context
            "us-east-1:851c121e-326d-4c9e-be47-fec40eb7b693", // Identity Pool ID
            Regions.US_EAST_1 // Region
    );

    AmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider);

    Toast.makeText(this, "Adding To Database...", Toast.LENGTH_LONG).show();

    CognitoCachingCredentialsProvider cognitoProvider = new CognitoCachingCredentialsProvider(
            getApplicationContext(), // Context
            "us-east-1:851c121e-326d-4c9e-be47-fec40eb7b693", // Identity Pool ID
            Regions.US_EAST_1 // Region
    );

    AmazonDynamoDBClient ddbClient = new AmazonDynamoDBClient(cognitoProvider);

    DynamoDBMapper mapper = new DynamoDBMapper(ddbClient);

    String streamName = intent.getStringExtra("streamName");
    String userCreated = intent.getStringExtra("userCreated");
    ArrayList<String> selectedFriend = intent.getStringArrayListExtra("userInvolved");
    intent.getStringExtra("comment");

    for(int i = 0; i < selectedFriend.size(); i++){

        Streams streams = new Streams();

        streams.setStreamname(streamName);
        streams.setUsercreated(userCreated);
        streams.setUserinvolved(selectedFriend.get(i));
        streams.setUnread(true);
        streams.setDeleted(false);

        mapper.save(streams);

    }
}

DynamodbMapper有一个批处理保存方法,允许您在批处理中保存多个对象。查看。

您的DynamoDB哈希键似乎是Stream类中用户创建的
字段。这是DynamoDB主键,它唯一地标识DynamoDB表中的单个项

每次调用
mapper.save(streams)
,您都会覆盖在循环的上一次迭代中编写的项目,因为您似乎只在此处设置一次
用户创建的
字段:

stringusercreated=intent.getStringExtra(“userCreated”)

尝试使用唯一标识符(例如,
流名称
作为散列键)。如果多个项具有相同的散列键,则还可以使用具有范围键的架构来创建(散列键、范围键)主键,以唯一标识DynamoDB表中的项

@DynamoDBTable(tableName = "Streams")
public class Streams{

    private String streamname;
    private String usercreated;
    private String userinvolved;
    private boolean unread;
    private boolean deleted;

    @DynamoDBAttribute(attributeName = "Stream_Name")
    public String getStreamname() {
        return streamname;
    }

    public void setStreamname(String streamname) {
        this.streamname = streamname;
    }

    @DynamoDBHashKey(attributeName = "User_Created")
    public String getUsercreated() {
        return usercreated;
    }

    public void setUsercreated(String usercreated) {
        this.usercreated = usercreated;
    }

    @DynamoDBAttribute(attributeName = "User_Involved")
    public String getUserinvolved() {
        return userinvolved;
    }

    public void setUserinvolved(String userinvolved) {
        this.userinvolved = userinvolved;
    }

    @DynamoDBAttribute(attributeName = "Unread")
    public boolean isUnread() {
        return unread;
    }

    public void setUnread(boolean unread) {
        this.unread = unread;
    }

    @DynamoDBAttribute(attributeName = "Deleted")
    public boolean isDeleted() {
        return deleted;
    }

    public void setDeleted(boolean deleted) {
        this.deleted = deleted;
    }
}