Android студия, база данных Firebase, обменная стоимость - PullRequest
0 голосов
/ 18 октября 2019

Я хочу обменять значение (у того же ребенка) в моей базе данных Firebase. В моей базе данных у меня есть v0, v1, v2, v3, v4, v5, и когда я нажимаю на свою кнопку, я хочу сделать это:

v1 = v2

v2 = v3

v3 = v4

v4 = v5

v5 = new_value

Я использую это, оно отлично работает, но слишком медленно ...

Я использую doTranslation в случае, когда 2 пользователя одновременно нажимают кнопку.

    tampon = new_valeur;
    acienvaleur = v5;



    refplayer.child(id_player).child("v5").runTransaction(new Transaction.Handler() {
            @Override
            public Transaction.Result doTransaction(MutableData mutableData) {
                String value = mutableData.getValue(String.class);

                if (value == null) {
                    return Transaction.success(mutableData);
                }

                mutableData.setValue(tampon);
                tampon = acienvaleur;


                return Transaction.success(mutableData);
            }

            @Override
            public void onComplete(DatabaseError databaseError, boolean b,
                                   DataSnapshot dataSnapshot) {

                refplayer.child(id_player).child("v4").runTransaction(new Transaction.Handler() {
                    @Override
                    public Transaction.Result doTransaction(MutableData mutableData) {
                        String value = mutableData.getValue(String.class);

                        if (value == null) {
                            return Transaction.success(mutableData);
                        }

                        mutableData.setValue(tampon);
                        tampon = value;



                        return Transaction.success(mutableData);
                    }

                    @Override
                    public void onComplete(DatabaseError databaseError, boolean b,
                                           DataSnapshot dataSnapshot) {

                        refplayer.child(id_player).child("v3").runTransaction(new 
                            Transaction.Handler() {
                            @Override
                            public Transaction.Result doTransaction(MutableData mutableData) {
                                String value = mutableData.getValue(String.class);

                                if (value == null) {
                                    return Transaction.success(mutableData);
                                }

                                mutableData.setValue(tampon);
                                tampon = value;



                                return Transaction.success(mutableData);
                            }

                            @Override
                            public void onComplete(DatabaseError databaseError, boolean b,
                                                   DataSnapshot dataSnapshot) {
                                refplayer.child(id_player).child("v2").runTransaction(new 
                                    Transaction.Handler() {
                                    @Override
                                    public Transaction.Result doTransaction(MutableData mutableData) 
                                        {
                                        String value = mutableData.getValue(String.class);

                                        if (value == null) {
                                            return Transaction.success(mutableData);
                                        }

                                        mutableData.setValue(tampon);
                                        tampon = value;



                                        return Transaction.success(mutableData);
                                    }

                                    @Override
                                    public void onComplete(DatabaseError databaseError, boolean b,
                                                           DataSnapshot dataSnapshot) {
                                        refplayer.child(id_player).child("v1").runTransaction(new 
                                            Transaction.Handler() {
                                            @Override
                                            public Transaction.Result doTransaction(MutableData 
                                                mutableData) {
                                                String value = mutableData.getValue(String.class);

                                                if (value == null) {
                                                    return Transaction.success(mutableData);
                                                }

                                                mutableData.setValue(tampon);
                                                tampon = value;



                                                return Transaction.success(mutableData);
                                            }

                                            @Override
                                            public void onComplete(DatabaseError databaseError, 
                                            boolean b,
                                                                   DataSnapshot dataSnapshot) {
}
}
}

Есть ли у вас какое-либо решение, чтобы ускорить мои изменения? }

Json: до:

"v1" : "5",
"v2" : "12",
"v3" : "102",
"v4" : "444",
"v5" : "2",

после:

"v1" : "12",
"v2" : "102",
"v3" : "444",
"v4" : "2",
"v5" : "9999",

1 Ответ

0 голосов
/ 19 октября 2019

Поскольку вы модифицируете все дочерние узлы в refplayer.child(id_player), все должно быть намного быстрее, если вы просто запустите одну транзакцию на этом уровне.


refplayer.child(id_player).runTransaction(new Transaction.Handler() {
    @Override
    public Transaction.Result doTransaction(MutableData mutableData) {
        if (mutableData.getValue() == null) {
            return Transaction.success(mutableData);
        }

        mutableData.child("v1").setValue(mutableData.child("v2").getValue(String.class));
        mutableData.child("v2").setValue(mutableData.child("v3").getValue(String.class));
        mutableData.child("v3").setValue(mutableData.child("v4").getValue(String.class));
        mutableData.child("v4").setValue(mutableData.child("v5").getValue(String.class));
        mutableData.child("v5").setValue(new_valeur);

        return Transaction.success(mutableData);
    }

    @Override
    public void onComplete(DatabaseError databaseError, boolean b,
                           DataSnapshot dataSnapshot) {

        ...
    }

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...