Ошибка при попытке вызвать метод - не может быть применена к () - PullRequest
1 голос
/ 24 апреля 2019

Изображение структуры БД

В настоящее время я создал метод обновления книги с помощью Firestore.Я пытаюсь вызвать этот метод в onOptionsItemSelected.

Я относительно новичок в Android и у меня всегда было впечатление, что при вызове этого метода я бы назвал его updateBook (Книга книг).

Ниже приведен мой метод updateBook

@Override
public void updateBook(Book book) {
    String chapterName = editTextChapterName.getText().toString().trim();
    String chapterInfo = editTextChapterInfo.getText().toString().trim();
    int chapterNumber = numberPickerChapterNumber.getValue();

    if (chapterName.trim().isEmpty() || chapterInfo.trim().isEmpty()) { //ensure that user has not left boxes empty
        Toast.makeText(this, "Please add a chapter name and the chapter information", Toast.LENGTH_SHORT).show();
    }

    FirebaseFirestore db = FirebaseFirestore.getInstance();
    DocumentReference bookRef = db.collection("Book")
            .document();

    bookRef.update("chapterName", book.getChapterName(),
            "chapterInfo", book.getChapterInfo(),"chapterNumber", book.getChapterNumber())
            .addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()){
                        Toast.makeText(AdminUpdateActivity.this, "Success", Toast.LENGTH_SHORT).show();
                    }

                }
            });

Ниже я пытаюсь вызвать мой метод

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.save_icon:
            updateBook();
        return true;
        default:
            return super.onOptionsItemSelected(item);
    }

В скобках updateBook я получаю сообщение об ошибке «Не удается применить к ()».

Я прочиталдругие вопросы здесь, чтобы сделать с этой темой, но не нашли решение.Может кто-нибудь объяснить, как решить эту проблему и почему?

Спасибо

1 Ответ

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

Чтобы решить эту проблему, вы должны изменить следующую строку кода:

DocumentReference bookRef = db.collection("Book")
        .document();

на

DocumentReference bookRef = db.collection("Book")
        .document(bookId);

Без передачи идентификатора книги методу document() методFirebase SDK не знает, какой объект книги вы хотите обновить.Кроме того, вызывая метод document() для DocumentReference, он каждый раз генерирует только новый случайный идентификатор.

Также необходимо еще одно изменение.Пожалуйста, также удалите аргумент из вашего updateBook() метода.Должно быть:

public void updateBook() {}

Без аргументов.

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