作者:manly213 | 来源:互联网 | 2023-05-19 05:35
如何从Android客户端自动增加存储在Firebase中的值?
目前:我宣布int id = 1
.当我递增时,我看到存储的值2,3等.那没关系,但是当我重新运行项目时,id
再次设置为1.
我希望它表现得像一个静态变量,所以我可以创建一个从1到无穷大而不重置的id.
更新失败
我使用以下内容将Firebase引用和字符串传递给函数incrementCounter.
if(language_chosen.equalsIgnoreCase("english"))
{
Firebase publRef = f.child("Language").child("English").child("Message");
Firebase newPublRef = publRef.push();
writeMsgActivity demo = new writeMsgActivity();
demo.incrementCounter(newPublRef,the_msg_enter);
}
现在我尝试public void incrementCounter(Firebase publref,String my_msg)
在oncomplete方法中使用传递的引用和字符串, 但它给了我一个错误.
public void incrementCounter(Firebase publref,String my_msg) {
publref.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(final MutableData currentData) {
if (currentData.getValue() == null) {
currentData.setValue(1);
} else {
currentData.setValue((Long) currentData.getValue() + 1);
}
return Transaction.success(currentData);
}
public void onComplete(FirebaseError firebaseError, boolean committed, DataSnapshot currentData) {
if (firebaseError != null) {
System.out.println("Firebase counter increment failed.");
} else {
System.out.println("Firebase counter increment succeeded.");
Map publ = new HashMap();
publ.put("pubMsg", my_msg);
publ.put("id",currentData);
publref.setValue(publ);
}
}
});
}
更新已解决
final Firebase upvoteref = new Firebase("https://shareurday.firebaseio.com/Message/"+msg_id+"/upvotes");
upvoteref.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(final MutableData currentData) {
if (currentData.getValue() == null) {
currentData.setValue(1);
} else {
currentData.setValue((Long) currentData.getValue() + 1);
}
return Transaction.success(currentData);
}
public void onComplete(FirebaseError firebaseError, boolean committed, DataSnapshot currentData) {
if (firebaseError != null) {
System.out.println("Firebase counter increment failed.");
} else {
System.out.println("Firebase counter increment succeeded.");
}
}
});
变量msg_id是来自push的随机生成的id.
1> stkent..:
这是一个增加单个计数器的示例方法.关键的想法是,您要么创建条目(将其设置为1),要么改变现有条目.在此处使用事务可确保如果多个客户端同时尝试递增计数器,则所有请求最终都将成功.从Firebase文档(强调我的):
在处理可能被并发更新损坏的复杂数据时,请使用我们的事务功能
public void incrementCounter() {
firebase.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(final MutableData currentData) {
if (currentData.getValue() == null) {
currentData.setValue(1);
} else {
currentData.setValue((Long) currentData.getValue() + 1);
}
return Transaction.success(currentData);
}
@Override
public void onComplete(FirebaseError firebaseError, boolean committed, DataSnapshot currentData) {
if (firebaseError != null) {
Log.d("Firebase counter increment failed.");
} else {
Log.d("Firebase counter increment succeeded.");
}
}
});
}