我已经编辑了代码。有用。它增加了火力计中的计数器。但是有一个问题。每当我重新启动应用程序时(在清除最近的应用程序之后),增量将重新开始。它不会从之前的数字继续。
公共类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
});
});
});
答案 0 :(得分:3)
需要修理三件事:
count
是一个数字,将被视为Long
。您无法直接转换为int
。相反,您可以转换为long
,或者您可以使用两个演员阵容:int count = (int)(long) ...
setValue()
会导致听众再次发生火灾,等等。正如弗兰克所说,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());
}
}
});