繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM