Я работаю над существующим приложением Android с внутренним анализом (localDatastore включен, но не используется в этом контексте), которое имеет следующую структуру объектов:
Объект A имеет массив объектов B
Объект B имеет массив объектов C
Я сохраняю эту структуру объекта, используя saveInBackground при вызове следующего saveInBackground в готовом SaveCallback в обратном порядке (C, B, A).Для внутренних двух это нормально, но объект верхнего уровня не сохраняется.Вот код (frame, newStep и order являются объектами классов, унаследованных от класса ParseObject)
frame.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
Log.i("Info", "frame.save callback OK");
frames.add(frame);
newStep.setTimeFrames(frames);
newStep.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
Log.i("Info", "newStep.save callback OK");
List<ProcessingStep> steps = order.getProcessingSteps();
steps.add(newStep);
order.setProcessingSteps(steps);
order.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null){
Log.i("Info", "order.save callback OK");
}else{
Log.i("Info", "order.save callback FAIL");
}
}});
} else {
Log.i("Info", "newStep.save callback FAIL");
e.printStackTrace();
}
}
});
} else {
Log.i("Info", "frame.save callback FAIL");
e.printStackTrace();
}
}
});
В журнале консоли я вижу только «обратный вызов frame.save OK», «newStep.saveInBackground ()"Кажется, тоже выполняется (объект появляется в бэкэнде), однако я никогда не получаю сообщение журнала в обратном вызове.
Если я сохраняю все объекты до этого синхронно без ссылок друг на друга, а затем вызываю код здесь, этоКажется, работает (работал по крайней мере один раз), но заняло навсегда (минут).Запросы от серверной части выполняются очень быстро, и объект фрейма также сохраняется практически мгновенно, но обработанные обратные вызовы кажутся ошибочными.Когда это терпит неудачу, я не получаю никаких исключений, регистрирую все, что кажется, что оно просто молча терпит неудачу.
Я ищу любое понимание, почему Parse ведет себя так, а также как это исправить.
edit: Проблема, похоже, связана с двойным отношением (A к B и B к C).Если я попробую только с A до B или B до C, все будет работать нормально.Однако для меня остается загадкой, почему разделение операции с помощью обратных вызовов, похоже, не работает.