如何增加firebase中的数字

时间:2017-05-21 22:12:27

标签: android firebase firebase-realtime-database

我已经编辑了代码。有用。它增加了火力计中的计数器。但是有一个问题。每当我重新启动应用程序时(在清除最近的应用程序之后),增量将重新开始。它不会从之前的数字继续。

公共类MainActivity扩展了AppCompatActivity {

retrieveFacebookUserInfo = function() {
    var deferred = Q.defer();

    var propertiesObject_FB = { id:'id', name:'name', access_token:'access_token' };

    request({url:'https://graph.facebook.com/', qs:propertiesObject_FB}, function(err, response, body) {
      if(err) {
            deferred.resolve(null);
      }
        else {
            var fb_json = JSON.parse(body);
          console.log("Get response: " + response.statusCode);
            console.log(fb_json);

            //storing information to db
            dbcontroller.writingtodb();

            deferred.resolve(fb_json);
        }
    });

    return deferred.promise;
};
app.get('/info/facebook', function(req, res){
        retrieveFacebookUserInfo().then(function(result){
                res.render('facebook.ejs', {
                    title : 'Facebook information',
                    fb_obj: result
                });

            });

        });

  app.get('/info/linkedin', function(req, res){
        retrieveLinkedInUserInfo().then(function(result){
            res.render('linkedin.ejs', {
                title : 'LinkedIn information',
                headline_linkedin: result.headline
            });
        });
  });

this is my database

1 个答案:

答案 0 :(得分:3)

需要修理三件事:

    数据库中的
  1. count是一个数字,将被视为Long。您无法直接转换为int。相反,您可以转换为long,或者您可以使用两个演员阵容:int count = (int)(long) ...
  2. 您正在使用后增量运算符。它使用该值在之后添加一个。改为使用预增量。
  3. 听一个单独的更改,否则你会循环,因为setValue()会导致听众再次发生火灾,等等。
  4. 正如弗兰克所说,Transaction是安全修改计数器的更好方法。

        final DatabaseReference mRootRef = FirebaseDatabase.getInstance().getReference();
        final DatabaseReference mCounterRef = mRootRef.child("counter");
        // listen for single change
        mCounterRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                // getValue() returns Long
                long count = (long) dataSnapshot.child("count").getValue();
    
                System.out.println("count before setValue()=" + count);
    
                mCounterRef.child("count").setValue(++count);  // <= Change to ++count
    
                System.out.println("count after setValue()=" + count);
    
            }
    
            @Override
            public void onCancelled(DatabaseError databaseError) {
                // throw an error if setValue() is rejected
                throw databaseError.toException();
            }
        });
    

    已修改问题的更新:

    您可能需要更新安全规则以允许写访问权限。添加完成侦听器以查看setValue()是否失败:

    mCounterRef.child("count").setValue(++count, new DatabaseReference.CompletionListener() {
        @Override
        public void onComplete(DatabaseError databaseError,
                               DatabaseReference databaseReference) {
            if (databaseError != null) {
                System.out.println("Error: " + databaseError.getMessage());
            }
        }
    });