Android SDK for AWS SDB の使用を開始したばかりですが、書き込みと読み取りで予期しない結果が発生しています。これは確かに簡単な問題なので、説明をいただければ幸いです。
これが問題です。
まず、次のように 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));
Chrome SdbNavigator を使用して、myField の値が 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() は次のように定義されます。
protected String getStringValueForAttributeFromList( String attributeName, List<Attribute> attributes ) {
for ( Attribute attribute : attributes ) {
if ( attribute.getName().equals( attributeName ) ) {
return attribute.getValue();
}
}
return "";
}
予期しない部分は、sdbNavigator がレコードに 2 番目の (正しい) 値があることを示しているにもかかわらず、getStringValueForAttributeFromList() 関数が myField 属性の最初の (現在は正しくない) 値を返すことです。
何が起こっているのか、どのように修正するのか?? ありがとう。