我目前已创建一种使用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括号内,我得到一个错误“无法应用于()”。
我已经阅读了有关此主题的其他问题,但没有找到解决方案。有人可以解释如何解决此问题以及为什么吗?
谢谢
答案 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() {}
不带任何参数。