Reputation: 91
I have already seen other similar questions, all of them had mistakenly written @DynamoDBHashKey as @DynamoDBIndexHashKey, but I haven't.
I don't want a sort key or index. I have already created my table with the primary key as email.
NewUser.Java
import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBAttribute;
import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBHashKey;
import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBTable;
mHandler.post(new Runnable() {
public void run() {
EditText name=(EditText)findViewById(R.id.RegisterName);
EditText email=(EditText)findViewById(R.id.Email);
Logindatabase login = new Logindatabase();
login.setEmail(email.getText().toString());
login.setName(name.getText().toString());
login.setStatus();
mapper.save(login); //Exception is thrown here
Toast.makeText(NewUser.this, "Sent", Toast.LENGTH_SHORT).show();
}
});
Logindatabase.java
@DynamoDBTable(tableName = "Login")
public class Logindatabase {
private String email;
private String Name;
private String password;
private String Status;
@DynamoDBHashKey(attributeName = "Email")
public void setEmail(String email){
this.email=email;
}
public String getEmail(){return email;}
@DynamoDBAttribute(attributeName = "Name")
public void setName(String Name){
this.Name=Name;
}
public String getName(){
return Name;
}
@DynamoDBAttribute(attributeName = "Status")
public void setStatus()
{
Status="Pending";
}
}
logcat
E/AndroidRuntime: FATAL EXCEPTION: main
com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMappingException: No interface com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBHashKey annotation found in class class com.example.sherry.empapp.Logindatabase
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.needAutoGenerateAssignableKey(DynamoDBMapper.java:720)
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.save(DynamoDBMapper.java:780)
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.save(DynamoDBMapper.java:688)
at com.example.sherry.empapp.NewUser$1.run(NewUser.java:67)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:5419)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
at dalvik.system.NativeStart.main(Native Method)
Upvotes: 0
Views: 1607
Reputation: 19543
In case you are using lombok to avoid the creation of getter and setter the annotation @DynamoDBHashKey
can be used directly on the field and in the setter as well ElementType.FIELD, ElementType.METHOD
import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBAttribute;
import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBHashKey;
import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBRangeKey;
import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBTable;
import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBVersionAttribute;
import lombok.Builder;
import lombok.Data;
@Builder
@Data
@DynamoDBTable(tableName = "ProductTable")
public class Product {
@DynamoDBHashKey
private String userName;
@DynamoDBRangeKey
private Long range;
@DynamoDBVersionAttribute
private Long version;
@DynamoDBAttribute(attributeName = "name")
private String name;
}
In this case, the setters are still needed but those were added by the lombok @Data
annotation.
Upvotes: 1
Reputation: 39226
The @DynamoDBHashKey
annotation should be added for get method rather than set method.
Also, please ensure that hash key attribute name matches (defined in model class i.e. Logindatabase) with DynamoDB table hash key attribute definition (and it is case sensitive).
@DynamoDBHashKey(attributeName = "email")
public String getEmail() {
return email;
}
Upvotes: 1