Попытка добавить отношения в Backendless.Нет ошибки, но общее количество добавленных отношений всегда равно 0 - PullRequest
0 голосов
/ 13 декабря 2018

Привет, ребята. Я пытаюсь сохранить объекты с отношениями в Backendless через API.У меня есть два класса, а именно Task и Reminder.Задача может быть связана со многими напоминаниями, поэтому мне нужно соотношение 1: N между таблицей задач и таблицей напоминаний в Backendless.Мой класс задач выглядит следующим образом:

public class Task {


    public Date created;
    public Date updated;
    private List<Reminder> reminders = null;
    private String ownerId;
    @PrimaryKey
    @NonNull
    private String objectId;
    @NonNull
    private String taskTitle;
    @NonNull
    private Date deadline;
    @NonNull
    private int isCompleted = 0;
    @NonNull
    private int isExpired = 0;


    public String getOwnerId() {
        return ownerId;
    }

    public void setOwnerId(String ownerId) {
        this.ownerId = ownerId;
    }

    @NonNull
    public String getObjectId() {
        return objectId;
    }

    public void setObjectId(@NonNull String objectId) {
        this.objectId = objectId;
    }

    public List<Reminder> getReminders() {
        return reminders;
    }

    public void setReminders(List<Reminder> reminders) {
        this.reminders = reminders;
    }

    public Date getCreated() {
        return created;
    }

    public void setCreated(Date created) {
        this.created = created;
    }

    public Date getUpdated() {
        return updated;
    }

    public void setUpdated(Date updated) {
        this.updated = updated;
    }

    @NonNull
    public int getIsCompleted() {
        return isCompleted;
    }

    public void setIsCompleted(@NonNull int isCompleted) {
        this.isCompleted = isCompleted;
    }

    @NonNull
    public int getIsExpired() {
        return isExpired;
    }

    public void setIsExpired(@NonNull int isExpired) {
        this.isExpired = isExpired;
    }

    public String getTaskTitle() {
        return taskTitle;
    }

    public void setTaskTitle(String taskTitle) {
        this.taskTitle = taskTitle;
    }

    public Date getDeadline() {
        return deadline;
    }

    public void setDeadline(Date deadline) {
        this.deadline = deadline;
    }


}

Класс напоминания:

public class Reminder {

    private String title;
    private Date time;
    private String objectId;




    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Date getTime() {
        return time;
    }

    public void setTime(Date time) {
        this.time = time;
    }

    public String getObjectId() {
        return objectId;
    }

    public void setObjectId(String objectId) {
        this.objectId = objectId;
    }
}

Я сохраняю объекты и устанавливаю соотношение, как показано ниже:

    public void saveTaskToServer(final Task task) {
        List<Reminder> remindersList = new ArrayList<>();

   remindersList = task.getReminders();
final List<Reminder> savedReminders = new ArrayList<>();

        if(remindersList!=null && remindersList.size()!=0) {
            for
                    (Reminder reminder : remindersList) {

                reminder.setTitle(task.getTaskTitle());

                Backendless.Persistence.save(reminder, new AsyncCallback<Reminder>() {
                    @Override
                    public void handleResponse(Reminder response) {
                        savedReminders.add(response);

                                  }

                    @Override
                    public void handleFault(BackendlessFault fault) {

                        Log.i("error saving remidners", fault.toString());
                    }
                });


            }
        }
 Backendless.Persistence.save(task, new AsyncCallback<Task>() {
                @Override
                public void handleResponse(Task response) {

                    newTask = response;
                    Log.i("id is ", newTask.getObjectId());

                    insertTask(response);
                    snackbarMessage.postValue("Task Created Successfully.");

                }

                @Override
                public void handleFault(BackendlessFault fault) {

                    Log.i("error", fault.getMessage());
                }
            });





        Backendless.Persistence.of(Task.class).addRelation(task, "reminders", savedReminders, new AsyncCallback<Integer>() {

            @Override
            public void handleResponse(Integer response) {
                Log.i("response", "added" + response);
                newTask.setReminders(savedReminders);
            }

            @Override
            public void handleFault(BackendlessFault fault) {
                Log.i("response", "error" + fault.toString());
            }
        });

    }

Я попытался сохранить отношение, используя имя таблицы: Class: n вместо parentColumnName.Также попытался сохранить объекты напоминаний вместо самих объектов напоминания. Объекты задачи и напоминания должным образом сохраняются в бесконечной консоли в их соответствующих таблицах, но столбец напоминания в таблице задач по-прежнему остается пустым и никакие отношения не добавляются.Счетчик отношений в бэкэнд-вызове в Android Studio также возвращает 0. Любой совет действительно приветствуется.Я следовал этому примеру.

1 Ответ

0 голосов
/ 14 декабря 2018

Мои отношения не сохранялись, потому что я использовал асинхронные обратные вызовы в backendless !!Я не знаю, почему я не видел этого раньше.Поскольку вызовы сохранения выполнялись до того, как асинхронные обратные вызовы могли завершиться, я получил нулевые значения.Исправлена ​​ошибка, при которой вызовы выполнялись синхронно и включались в асинхронную задачу.

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