2017-08-30 3 views
0

J'ai déjà vu d'autres questions similaires, tous avaient par erreur écrit @DynamoDBHashKey comme @DynamoDBIndexHashKey, mais je ne l'ai pas fait.DynamoDB Aucune interface et aucune notation DynamoDBHashKey trouvée erreur

Je ne veux pas de clé de tri ou d'index. J'ai déjà créé ma table avec la clé primaire comme 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) 

Répondre

0

L'annotation @DynamoDBHashKey doit être ajoutée pour méthode get plutôt que la méthode définie. De même, assurez-vous que le nom d'attribut de clé de hachage correspond (défini dans la classe de modèle, c'est-à-dire Logindatabase) avec la définition d'attribut de clé de hachage de table DynamoDB (sensible à la casse).

@DynamoDBHashKey(attributeName = "email") 
public String getEmail() { 
    return email; 
} 
+0

Merci! Ça a marché! : D –

+0

également rendre votre variable privée –