如我在文档中指定的那样创建对象,我填充它们的属性并将链接保存在数据存储中:
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 :(得分:1)
我是Kinvey的工程师,可以帮助你解决这个问题 - 我在我们的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);