尝试调用方法时出错-无法应用于()

时间:2019-04-24 15:55:12

标签: java android firebase google-cloud-firestore

Image of DB structure

我目前已创建一种使用Firestore更新图书的方法。我试图在onOptionsItemSelected中调用此方法。

我对Android相对较新,在调用此方法时总是给人留下深刻的印象,我将其称为updateBook(Book book)。

下面是我的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 :(得分:0)

要解决此问题,您应该更改以下代码行:

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

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

在没有将书籍ID传递给document()方法的情况下,Firebase SDK并不真正知道您要更新哪个书籍对象。除此之外,在document()上调用DocumentReference方法每次只会生成一个新的随机id。

还需要进行其他更改。也请从您的updateBook()方法中删除参数。应该是:

public void updateBook() {}

不带任何参数。