![](/img/trans.png)
[英]How could I update and GET a ServerValue.increment operation via setValue in Firebase - Realtime?
[英]How to impose a limit by using ServerValue.increment() in firebase realtimedatabase?
我是移动 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>() {
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.