在Firebase上存储变量的正确方法适用于Android

时间:2016-02-06 00:04:19

标签: android firebase firebase-realtime-database

我已成功将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();

    }
});

1 个答案:

答案 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.
    }
});

请阅读整篇文档,因为它涵盖了您可能遇到的许多主题和问题。