如何在firebase实时数据库中使用ServerValue.increment()来施加限制



我是移动android开发的新手。我正在尝试构建一个图书馆管理应用程序。这里我有两个管理员,他们可以通过点击按钮"来修改数据库(实时数据库,firebase(中的bookCount;添加";。我想对bookCount施加一个限制,它不应该超过50,即如果当前的bookCount是35,并且两个管理员都想增加6和10,那么它必须处理任何一个请求,但不能同时处理两个请求。我尝试了以下代码来强制执行该条件:(结果应该是35+6或35+10,但不是35+6+10(

public void onClick(View view) {
String isbn=isbnNo.getText().toString();
int books= Integer.parseInt(addBooks.getText().toString());
DatabaseReference ref=reference.child("books").child(isbn).child("bookCount");//line 52
ref.setValue(ServerValue.increment(books)).addOnCompleteListener((Activity) getApplicationContext(), new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
Toast.makeText(getApplicationContext(),"Added successfully",Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(getApplicationContext(),"Please try again",Toast.LENGTH_LONG).show();
}
}
});}

我的数据库看起来像这个

我修改了这样的规则:

{
"rules": {
"books":{
"$isbn":{
".write": "newData.hasChildren(['authorName', 'bookCount','bookName','isbn','price'])",
"bookCount":{
".validate":"newData.isNumber()&& newData.val()>=0 && newData.val<50"
}
}
}

}}

Logcat输出:

Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to android.app.Activity
at com.example.librarymanagementsystem.updateBookCount.onClick(updateBookCount.java:53)
at java.lang.reflect.Method.invoke(Native Method) 
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409) 
at android.view.View.performClick(View.java:6608) 
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119) 
at android.view.View.performClickInternal(View.java:6585) 
at android.view.View.access$3100(View.java:785) 
at android.view.View$PerformClick.run(View.java:25919) 
at android.os.Handler.handleCallback(Handler.java:873) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:201) 
at android.app.ActivityThread.main(ActivityThread.java:6826) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873) 

单击添加按钮后,数据库中的值正在增加,但我的应用程序立即崩溃。我认为这是因为任务,但我不确定。感谢您的帮助。

这部分代码使(Activity) getApplicationContext()失败,这表明getApplicationContext()没有返回Activity

我建议删除通话的这一部分,只需拨打:

ref.setValue(ServerValue.increment(books))
.addOnCompleteListener(new OnCompleteListener<Void>() {
...

最新更新