我是一个名为Booking
的解析类,它指向解析类:Ticket
和_User
以及其他不相关的字段。
Ticket
指向Location
以及更多不相关字段的位置
除Booking
类之外的大多数类都具有类级访问列表限制,这对我的应用程序的安全性是必需的。
以下是我用来尝试使用android SDK保存预订对象的代码:
final Booking booking = new Booking();
// For pointer like behaviour
Ticket ticketPointer = Ticket.createWithoutData(Ticket.class, bookingData.getTicket().getObjectId());
booking.setTicket(ticketPointer);
ArrayList<Coupon> couponPointers = new ArrayList<>();
for (Coupon coupon : bookingData.getCoupons()) {
// For pointer like behaviour
couponPointers.add(Coupon.createWithoutData(Coupon.class, coupon.getObjectId()));
}
booking.setCoupons(couponPointers);
booking.setClient(ParseUser.getCurrentUser());
booking.setTicketCount(bookingData.getTicketCount());
booking.setPaymentMethod(Booking.PaymentMethod.CASH_ON_ARRIVAL);
booking.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (asserter.assertPointerQuietly(e)) {
e.printStackTrace();
} else {
l.d("Successfully posted a booking request on server");
}
}
});
问题在于解析以递归方式保存对象,因此即使指针指向的对象也会与保存的对象一起保存。并且由于常规用户无法访问其他类,因此在尝试保存指针指向的这些对象时会引发异常。因此,我根据保存指针here的解决方案,使用createWithoutData
方法以评论// For pointer like behaviour
标记的方式,以指针的形式将票证和优惠券对象放入预订对象中。登记/>
所有这一切都运行良好,我通过访问以递归方式保存的Ticket和Coupon类来摆脱异常。
但是,令我惊讶的是,上面的代码导致了另一个异常,这是由于尝试访问Location
类引起的,Ticket
对象的指针指向Booking
对象。对象(第二级指针)!!!。
有没有办法防止指向位置对象?理想的解决方案是首先禁用递归保存,但任何解决方案都将受到赞赏。
存在一个变通方法,但它很难看,我想避免它:它涉及使用对象的对象id而不是指针的字符串表示。