0

Beim Versuch, DynamoDB-Tabelle nur zu aktualisieren, wird der Partitionsschlüsselwert aktualisiert. Beim Versuch, den Rest der Werte aufzunehmen, erscheint der folgende Fehler. Auf die Getter-Methoden zeigen.DynamoDB-Tabelle wird teilweise aktualisiert

import android.util.Log; 
import com.amazonaws.AmazonServiceException; 
import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBHashKey; 
import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper; 
import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBTable; 
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient; 
import com.amazonaws.services.dynamodbv2.model.DescribeTableRequest; 
import com.amazonaws.services.dynamodbv2.model.DescribeTableResult; 
import com.amazonaws.services.dynamodbv2.model.ResourceNotFoundException; 

public class FeedbackDynamoDBManager { 

private static final String TAG = "FeedbackDynamoDBManager"; 


public static String getTestTableStatus() { 

    try { 
     AmazonDynamoDBClient ddb = FeedbackActivity.clientManager 
       .ddb(); 

     DescribeTableRequest request = new DescribeTableRequest() 
       .withTableName(Constants.FEEDBACK_TABLE); 
     DescribeTableResult result = ddb.describeTable(request); 

     String status = result.getTable().getTableStatus(); 
     return status == null ? "" : status; 

    } catch (ResourceNotFoundException e) { 
    } catch (AmazonServiceException ex) { 
     FeedbackActivity.clientManager 
       .wipeCredentialsOnAuthError(ex); 
    } 
    return ""; 
} 


public static void insertFeedback(FeedbackForm feedbackForm) { 
    AmazonDynamoDBClient fdb = FeedbackActivity.clientManager 
      .ddb(); 
    DynamoDBMapper fMapper = new DynamoDBMapper(fdb); 

    try { 
     Log.d(TAG, "Inserting form"); 
     fMapper.save(feedbackForm); 
     Log.d(TAG, "Form inserted"); 
    } catch (AmazonServiceException ex) { 
     Log.e(TAG, "Error inserting form"); 
     ex.printStackTrace(); 
     FeedbackActivity.clientManager 
       .wipeCredentialsOnAuthError(ex); 
    }catch (Exception e){ 
     Log.e("Feedback Form: ",e.toString()); 
     e.printStackTrace(); 
    } 
} 

@DynamoDBTable(tableName = Constants.FEEDBACK_TABLE) 
public static class FeedbackForm { 
     private String formId; 
     private String bus; 
     private String comments; 
     private String ended_at; 
     private String route; 
     private String started_from; 
     private String travel_date; 

     @DynamoDBHashKey(attributeName = "form_id") 
     public String getFormId() { 
      return formId; 
     } 
     public void setFormId(String formId) { 
      this.formId = formId; 
     } 

     @DynamoDBHashKey(attributeName = "bus") 
     public String getBus() { 
      return bus; 
     } 
     public void setBus(String bus) { 
      this.bus = bus; 
     } 

     @DynamoDBHashKey(attributeName = "comments") 
     public String getComments() { 
      return comments; 
     } 
     public void setComments(String comments) { 
      this.comments = comments; 
     } 

     @DynamoDBHashKey(attributeName = "ended_at") 
     public String getEndedAt() { 
      return ended_at; 
     } 
     public void setEndedAt(String ended_at) { 
      this.ended_at = ended_at; 
     } 

     @DynamoDBHashKey(attributeName = "route") 
     public String getRoute() { 
      return route; 
     } 
     public void setRoute(String route) { 
      this.route = route; 
     } 

     @DynamoDBHashKey(attributeName = "started_from") 
     public String getStartedFrom() { 
      return started_from; 
     } 
     public void setStartedFrom(String started_from) { 
      this.started_from = started_from; 
     } 

     @DynamoDBHashKey(attributeName = "travel_date") 
     public String getTraveDate() { 
      return travel_date; 
     } 
     public void setTraveDate(String travel_date) { 
      this.travel_date = travel_date; 
     } 

    } 
} 

FeedbackDynamoDBManager.java

FeedbackDynamoDBManager.FeedbackForm feedbackForm = new FeedbackDynamoDBManager.FeedbackForm(); 

feedbackForm.setFormId(formId); 
feedbackForm.setTraveDate(selectedDate); 
feedbackForm.setComments(comments); 
feedbackForm.setRoute(selectedRoute); 
feedbackForm.setBus(selectedBus); 
feedbackForm.setEndedAt(selectedEndLocation); 
feedbackForm.setStartedFrom(selectedFromLocation); 
FeedbackDynamoDBManager.insertFeedback(feedbackForm); 

FeedbackActivity.java

03-15 14:39:47.040 11788-12278/com.iota.bus.institutebus E/AmazonClientManager: Error, wipeCredentialsOnAuthError calledcom.amazonaws.AmazonServiceException: The provided key element does not match the schema (Service: AmazonDynamoDB; Status Code: 400; Error Code: ValidationException; Request ID: 999LSFAJHJS999999D372C3LVVV4KQNSO5A99999999ASUAAJG) 
E/FEEDBACK FORM: Data inserted!!! 

    [03-15 14:39:47.104 4531: 4531 E/   ] 
    [adb] handle_packet() t->online(1) p->msg.arg0(30963) p->msg.arg1(0) OPEN 
    [ 03-15 14:39:47.104 4531: 4531 E/   ] 
    [adb] handle the adb command, and the command = adb shell:cat /proc/net/xt_qtaguid/stats | grep 10369 
    [ 03-15 14:39:47.132 4531: 4531 E/   ] 
    [adb] cuurent command is A_CLSE 
    [ 03-15 14:39:47.412 4531: 4531 E/   ] 
    [adb] handle_packet() t->online(1) p->msg.arg0(30964) p->msg.arg1(0) OPEN 
    [ 03-15 14:39:47.412 4531: 4531 E/   ] 
    [adb] handle the adb command, and the command = adb shell:cat /proc/11788/stat 
    [ 03-15 14:39:47.430 4531: 4531 E/   ] 
    [adb] cuurent command is A_CLSE 
    [ 03-15 14:39:47.450 4531: 4531 E/   ] 
    [adb] handle_packet() t->online(1) p->msg.arg0(30965) p->msg.arg1(0) OPEN 
    [ 03-15 14:39:47.450 4531: 4531 E/   ] 
    [adb] handle the adb command, and the command = adb shell:cat /proc/stat 
    [ 03-15 14:39:47.467 4531: 4531 E/   ] 
    [adb] cuurent command is A_CLSE 
    [ 03-15 14:39:47.642 4531: 4531 E/   ] 
    [adb] handle_packet() t->online(1) p->msg.arg0(30966) p->msg.arg1(0) OPEN 
    [ 03-15 14:39:47.642 4531: 4531 E/   ] 
    [adb] handle the adb command, and the command = adb shell:cat /proc/net/xt_qtaguid/stats | grep 10369 
    [ 03-15 14:39:47.669 4531: 4531 E/   ] 
    [adb] cuurent command is A_CLSE 

logcat

ich nicht viel Erfahrung Posting in Stackoverflow haben. Bitte sei nachsichtig :).

BEARBEITEN: Beim Auskommentieren anderer Getter als die von form_id. Die Daten werden aktualisiert. Andernfalls wird der Logcat-Fehler angezeigt.

AWS console DynamoDB table screenshot

+0

zeigen Sie den Code und erklären das erwartete Ergebnis – notionquest

+0

@notionquest Hoffentlich ist besser. –

Antwort

1

Das erste Problem ist auf FeedbackForm Klasse. Alle Attribute sind mit der Anmerkung @DynamoDBHashKey definiert. Bitte ändern Sie die Anmerkung wie unten für nicht Hash-Schlüsselfelder. Sie sollten @DynamoDBAttribute für normale Attribute verwenden.

@DynamoDBAttribute(attributeName = "comments") 
     public String getComments() { 
      return comments; 
     } 
+0

Vielen Dank, das hat mein Problem gelöst. Ich kopiere eingeklebt und merke es nicht. –

Verwandte Themen