2017-01-01 9 views
2

iOSバージョンを作成した後、私のアプリのAndroidバージョンをビルドしています。私はAWS DynamoDBを使用しています私のデータベース。私はリスト項目を持っており、その中に入れ子になったオブジェクトを保存しようとしています。ここでは、文書は、データベース内の次のようになります。カスタムマーシャラまたは@DynamoDBDocumentアノテーションなしでタイプクラスcom.amazonaws.services.dynamodbv2.model.AttributeValueをマーシャリングできません

enter image description here

私はこれらの地図データ型(これは私もアプリにそれらをロードするとき、彼らが何であるかである)を知っているので、私は、それらを保存しようMapデータ型も同様です。ここに私の友人のAWSテーブルのコードがあります:

public class FriendsDO { 
    private String _userFriendsId; 
    private List<Map<String, AttributeValue>> _friendRequests; 

     @DynamoDBHashKey(attributeName = "userFriendsId") 
     @DynamoDBAttribute(attributeName = "userFriendsId") 
     public String getUserFriendsId() { 
      return _userFriendsId; 
     } 

     public void setUserFriendsId(final String _userFriendsId) { 
     this._userFriendsId = _userFriendsId; 
     } 


     @DynamoDBAttribute(attributeName = "friendRequests") 
     public List<Map<String, AttributeValue>> getFriendRequests() { 
      return _friendRequests; 
     } 
     public void setFriendRequests(final List<Map<String, AttributeValue>> _friendRequests) { 
      this._friendRequests = _friendRequests; 
    } 

私はこれをより読みやすくするために、残りのアイテムを取り出しました。次のコード行は、新しいマップ項目をリストに保存しようとしたときに書いた行です。ここで

FriendsDO friendsTblToUpdate = new FriendsDO(); 

    List<Map<String, AttributeValue>> requestList = new ArrayList<Map<String, AttributeValue>>(); 

     Map<String, AttributeValue> mapToSave = new HashMap<String, AttributeValue>(); 
          mapToSave.put("friendID", new AttributeValue().withS(personId)); 
          mapToSave.put("friendName", new AttributeValue().withS(personName)); 
          mapToSave.put("friendUsername", new AttributeValue().withS(personUsername)); 

          requestList.add(mapToSave); 

      friendTblToUpdate.setUserFriendsId(item.get("userFriendsId").getS()); 
      friendTblToUpdate.setUserId(fbId); 
      friendTblToUpdate.setFriendRequests(requestList); 

    try { 
     objectMapper.save(friendTblToUpdate); 

     } catch (final AmazonClientException ex) { 
      ex.printTraceStack(); 
     } 

は私が受け取るスタックです:Android DynamoDBの中でマップアイテムを保存することが可能である場合

com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMappingException: Cannot marshall type class com.amazonaws.services.dynamodbv2.model.AttributeValue without a custom marshaler or @DynamoDBDocument annotation. 
                     at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.getObjectToMapMarshaller(ConversionSchemas.java:387) 
                     at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.augment(ConversionSchemas.java:317) 
                     at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.getMemberMarshaller(ConversionSchemas.java:300) 
                     at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.getMapToMapMarshaller(ConversionSchemas.java:369) 
                     at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.augment(ConversionSchemas.java:314) 
                     at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.getMemberMarshaller(ConversionSchemas.java:300) 
                     at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.getListToListMarshaller(ConversionSchemas.java:341) 
                     at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.augment(ConversionSchemas.java:310) 
                     at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.getMarshaller(ConversionSchemas.java:291) 
                     at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.ConversionSchemas$StandardItemConverter.convert(ConversionSchemas.java:257) 
                     at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper$SaveObjectHandler.execute(DynamoDBMapper.java:1044) 
                     at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.save(DynamoDBMapper.java:904) 
                     at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.save(DynamoDBMapper.java:688) 
                     at  com.treyherman.gifwrap.FindFBFriendsActivity$ViewHolder$2$1.run(FindFBFriendsActivity.java:362) 

誰でも知っていますか?それはiOSで非常にシンプルだったので、私はAndroidでそれを理解しようとかなりの時間を費やしました。早めに助けてくれてありがとう。

答えて

0

答えを見つけて、私はすべてを徹底的に考え抜いていました。 friendRequestsのデータ型をprivate List<Map<String, String>> _friendRequests;のように変更してから、残りのコードを適宜調整しました。

関連する問題