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"}

如何接收对象,而不是其中的链接,还有其他对象?

4

1 回答 1

1

我是 Kinvey 的工程师,可以帮助您解决这个问题——我在我们的支持论坛上发布了相同的答案,但认为其他人可能会在这里偶然发现它:

这不是不可能的!

在 Appdata 上,Get 和 GetEntity 方法有多种变体。在此处查看 javadocs: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);
于 2013-10-31T15:39:40.273 回答