Разбор Android SDK вложенного saveInBackground не работает - PullRequest
0 голосов
/ 12 марта 2019

Я работаю над существующим приложением 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, все будет работать нормально.Однако для меня остается загадкой, почему разделение операции с помощью обратных вызовов, похоже, не работает.

1 Ответ

0 голосов
/ 02 апреля 2019

Проблема была во включенном локальном хранилище данных. Без включенного localdatastore все работает как надо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...