2013-10-30 14 views
3

当我创建对象的文档中指定接收对象,我填写自己的属性,并保存在数据存储中的链接:这是不可能根据链路

public class InvitationEntity extends GenericJson { 
    @Key 
    public String objectId; 
    @Key 
    public int status; 
    @Key("_id") 
    public String id; 
    @Key 
    public String name; 
} 
public class EventEntity extends GenericJson { 
    @Key 
    public String name; 
    @Key 
    public String eventDate; 
    @Key 
    public String location; 
    @Key 
    public String tip; 
    @Key 
    public KinveyReference invitations; 

    public void initReference(InvitationEntity myInvitation){ 
     KinveyReference reference = new KinveyReference("invitationCollection", myInvitation.get("_id").toString()); 
     this.invitations = reference; 
    } 
} 

... 

InvitationEntity invitationEntity = new InvitationEntity(); 
invitationEntity.name = "3"; 
invitationEntity.objectId="3"; 
mKinveyClient.appData("invitationCollection", InvitationEntity.class).save(invitationEntity, new KinveyClientCallback<InvitationEntity>() { 
       @Override 
       public void onSuccess(InvitationEntity invitationEntity1) { 
        Log.e("my", "Ok1 " + invitationEntity1.toString()); 

        EventEntity eventEntity = new EventEntity(); 
        eventEntity.tip = "33"; 
        eventEntity.initReference(invitationEntity1); 
        mKinveyClient.appData("eventCollection", EventEntity.class).save(eventEntity, new KinveyClientCallback<EventEntity>() { 
         @Override 
         public void onSuccess(EventEntity eventEntity_rez) { 
          Log.e("my", "Ok2 " + eventEntity_rez.toString()); 
         } 

         @Override 
         public void onFailure(Throwable t) { 
          Log.e("my", "Failed to save entity " + t.getMessage()); 
         } 
        }); 
       } 

       @Override 
       public void onFailure(Throwable t) { 
        Log.e("my", "Failed to save entity " + t.getMessage()); 
       } 
      }); 

现在我做的请求:

Query q = mKinveyClient.query(); 
    mKinveyClient.appData("eventCollection", EventEntity .class).get(q, new KinveyListCallback<EventEntity >() { 
     @Override 
     public void onSuccess(EventEntity [] resalt) { 
       Log.d("my", resalt[0].toString()); 
     } 

     @Override 
     public void onFailure(Throwable t) { 
      Log.d("my", "Error fetching data: " + t.getMessage()); 
     } 
    }); 

我得到的结果:

{"invitations":{"_collection":"invitationCollection", 
          "_id":"52715e5b13dde23677021c80", 
          "_type":"KinveyRef"}, 
"tip":"33", 
"_acl":{"creator":"526182566bbfcbf429000518"}, 
"_kmd":{"lmt":"2013-10-30T19:30:36.086Z", 
       "ect":"2013-10-30T19:30:36.086Z"}, 
"_id":"52715e5c13dde23677021c81", 
"kid":"kid_TTpvqRShiO", 
"collection":"eventCollection"} 

它希望得到:

{"invitations":{"_id":"52715e5b13dde23677021c80", 
          "name":"3", 
          "objectId":"3", 
          "status":0, 
          "_acl":{"creator":"526182566bbfcbf429000518"}, 
          "_kmd":{"lmt":"2013-10-30T19:30:35.912Z", 
               "ect":"2013-10-30T19:30:35.912Z"}, 
               "kid":"kid_TTpvqRShiO", 
               "collection":"invitationCollection"}, 
"tip":"33", 
"_acl":{"creator":"526182566bbfcbf429000518"}, 
"_kmd":{"lmt":"2013-10-30T19:30:36.086Z", 
       "ect":"2013-10-30T19:30:36.086Z"}, 
"_id":"52715e5c13dde23677021c81", 
"kid":"kid_TTpvqRShiO", 
"collection":"eventCollection"} 

如何接收对象而不是其中的链接对象?

+0

帮助,请如何使使链接用实物代替? – user2939013

回答

1

我在Kinvey一名工程师,可以帮助您与this--我贴在我们的support forums相同的答案,但想通,别人可能会在这里绊倒:

这不是不可能的!

在Appdata上,Get和GetEntity方法有多种变体。看看这里的javadoc:http://devcenter.kinvey.com/android/reference/api/reference/com/kinvey/android/AsyncAppData.html

要解决KinveyReferences,通过一个String []包含要解决的第二个参数,以get方法的字段的名称,你的情况,你要使用:

mKinveyClient.appData("eventCollection", EventEntity .class).get(q, new String[]{"invitations"}, new KinveyListCallback() { ... } 

现在,回调的onSuccess将返回EventEntity,但引用解决,您可以致电:

InvitationEntity myInvite = results[0].getInvitations.getTypedObject(InvitationEntity.class);