2012-09-02 2 views
0

AWT SDB 용 Android SDK를 사용하기 시작했으며 예기치 않은 결과가 발생하여 쓰기 및 읽기가 발생했습니다. 이것은 분명히 간단한 문제이므로 모든 설명에 감사드립니다!SDB Android SDK - putAttributes() 및 getAttributes()가 일치하지 않습니다.

여기에 문제가 있습니다.

첫째,이 같은 SDB하는 기록을 쓰기 :

sdb.createDomain(new CreateDomainRequest("myDomain")); 

List<ReplaceableAttribute> attributes = new ArrayList<ReplaceableAttribute>(1); 
attributes.add(new ReplaceableAttribute().withName("myField").withValue(myField)); 

sdb.putAttributes(new PutAttributesRequest("myDomain", itemName, attributes)); 

내가 myField의 값이 올바르게 크롬 SdbNavigator를 사용하여 SDB에 기록되어 볼 수 있습니다.

이제 동일한 코드를 사용하지만 myField 특성에 대해 다른 값으로 레코드를 변경합니다. 다시 말하지만, SdbNavigator를 사용하여 레코드가 새 값으로 올바르게 기록되었음을 알 수 있습니다.

마지막으로, 나는 장치에서 응용 프로그램을 제거, (즉, 깨끗하게 닦아) 응용 프로그램을 다시 설치 한 다음 코드를 실행하기 위해 다시 실행 :

String s = "select * from `myDomain`"; 
SelectRequest selectRequest = new SelectRequest(s).withConsistentRead(true); 
List items = sdb.select(selectRequest).getItems(); 

int count = items.size(); 

for (int i=0; i<count; i++) { 
    Item item = (Item)(items.get(i)); 
    String itemName = item.getName(); 

    myField = getStringValueForAttributeFromList("myField", item.getAttributes()); 
} 
getStringValueForAttributeFromList()가

으로 정의된다

sdbNavigator 레코드가 두 번째 (올바른) 값을 갖는 표시 되더라도 -

protected String getStringValueForAttributeFromList(String attributeName, List<Attribute> attributes) { 
    for (Attribute attribute : attributes) { 
     if (attribute.getName().equals(attributeName)) { 
      return attribute.getValue(); 
     } 
    } 
    return "";  
} 

예상치 못한 부분은 getStringValueForAttributeFromList() 함수 myField 특성의 첫 번째 (현재 잘못된) 값을 반환한다.

무슨 일이 일어나고 있는지, 어떻게 수정해야합니까 ?? 감사.

답변

0

해결 방법 : 내가 직면 한 문제는 SDB가 동일한 레코드 (항목)에서 동일한 이름을 가진 여러 속성을 허용한다는 것입니다. 따라서 속성 myField에 대해 설정 한 첫 번째 값을 선택했습니다.

ReplaceableAttribute ra = new ReplaceableAttribute().withName("myField").withValue(myField); 
ra.setReplace(true); attributes.add(ra); 

를 한 후 위와 같이, putAttributesRequest()를 호출 : 당신이 고유성을 보장하려면 다음과 같이

, 당신은 교체 속성에 플래그를 설정해야합니다. 감사.

+0

AWS 문서 : http://docs.aws.amazon.com/AmazonSimpleDB/latest/DeveloperGuide/SDB_API_PutAttributes.html. "결국 일관성있는 읽기를 사용하면 DeleteAttributes 또는 PutAttributes 요청 (쓰기) 직후에 GetAttributes 또는 Select 요청 (읽기)이 업데이트 된 데이터를 반환하지 않을 수 있습니다. 일관된 읽기는 항상 성공적인 응답을받은 모든 쓰기를 반영합니다. 자세한 내용은 일관성을 참조하십시오. " – Jacky

관련 문제