我已成功将firebase集成到我的Android应用程序中。从那时起,我已经阅读了每一个教程,文档,提示,信息,代码示例,当然还有搜索堆栈溢出,无法在此完成我的目标。
我的老虎机游戏中有两个变量,mTokens和mSpins。现在它们在我的mainactivity中声明,所以每次打开应用程序时它们都会重置。我能够将它们存储在firebase中的用户标识下。但是,当用户使用旋转或赢取令牌时,我不知道如何增加或减少它们,而不是仅仅再次设置变量。我还需要在textviews中显示这两个值,但我尝试了无数代码更改,它通常会使应用程序崩溃。它返回null,或者不返回字符串。有一次它几乎工作,它没有在创建时更新,但是一旦我按下按钮就手动调用它。
所以要组织:
如何根据游戏玩法(加或减)操纵变量以保存firebase。
和
如何在应用程序的工具栏上将存储的值显示为实时文本视图。
重申一下,是的。我已经阅读了我能找到的每一个例子,而不是它的应用。我像老板一样工作谷歌,所以我真的得到了我必须要求的结果。要给firebase发电子邮件,他们建议在这里要求帮助其他人。
这就是我的代码目前的样子,但我已编辑并更改了相当多的时间。所以我以前更接近解决方案,并且不知道。
我也离开了火柱网址,所以可以看到结构。
Firebase ref = new Firebase("https://luckycashslots.firebaseio.com/data/users/" + MainActivity.uID + "/");
Firebase tokRef = ref.child("tokens");
//tokRef.setValue(mAuthData.getProvider());
//Tokens token = new Tokens(100);
//ref.setValue(token);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.child("tokens").getValue() != null) {
name = (String) dataSnapshot.child("tokens").getValue().toString();
tokens.setText(name);
//tokens.setText(dataSnapshot.getValue().toString());
// Toast.makeText(getApplicationContext(), name, Toast.LENGTH_LONG).show();
// System.out.println(dataSnapshot.getValue());
// String woot = dataSnapshot.getValue().toString();
// tokens.setText(woot);
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
Toast.makeText(getApplicationContext(), "couldnt update token text", Toast.LENGTH_LONG).show();
}
});
答案 0 :(得分:1)
要更改Firebase中的现有值,请使用事务。
来自Firebase documentation on transactions in Android:
Firebase upvotesRef = new Firebase("https://docs-examples.firebaseio.com/android/saving-data/fireblog/posts/-JRHTHaIs-jNPLXOQivY/upvotes");
upvotesRef.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData currentData) {
if(currentData.getValue() == null) {
currentData.setValue(1);
} else {
currentData.setValue((Long) currentData.getValue() + 1);
}
return Transaction.success(currentData); //we can also abort by calling Transaction.abort()
}
@Override
public void onComplete(FirebaseError firebaseError, boolean committed, DataSnapshot currentData) {
//This method will be called once with the results of the transaction.
}
});
请阅读整篇文档,因为它涵盖了您可能遇到的许多主题和问题。