[Firebase] Récupérer une valeur de ma base de donné, la modifier puis la save

Fermé
Krisix - Modifié le 29 févr. 2020 à 22:37
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 2 mars 2020 à 10:31
Bonjour à tous,
Je sollicite votre aide pour vous demander comment on peut récupérer une String de ma base de donné (sur Firebase) pour la transformer en un Integer puis lui ajouter 1 lorsqu'on appuie sur un bouton et ensuite la réenregistrer sur le serveur.

Voila ce que j'ai essayé de faire donc avec OnDataChange je récupére la valeur puis j'essaye la transformer en int avec int score = Integer.parseInt(coins);
mais quand je réutilise score dans la fonction OnClickListener mais Android Studio m'indique "Cannot resolve score". Donc je ne sais pas comment faire.

Voici mon code :

public class HomeFragment extends Fragment {

    public HomeFragment() {
        // Required empty public constructor
    }

    //firebase
    FirebaseAuth firebaseAuth;
    FirebaseUser user;
    FirebaseDatabase firebaseDatabase;
    DatabaseReference databaseReference;
    StorageReference storageReference;

    //init view
    ImageButton addCoinsBtn;
    TextView coinsTv;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view =inflater.inflate(R.layout.fragment_home, container, false);

        //init firebase
        firebaseAuth = FirebaseAuth.getInstance();
        user = firebaseAuth.getCurrentUser();
        firebaseDatabase = FirebaseDatabase.getInstance();
        databaseReference = firebaseDatabase.getReference("Users");
        storageReference = getInstance().getReference();//firebase storage reference


        coinsTv=(TextView)view.findViewById(R.id.coinsTv);
        addCoinsBtn=(ImageButton)view.findViewById(R.id.add_coins);



        Query query = databaseReference.orderByChild("email").equalTo(user.getEmail());
        query.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                //check until required data get
                for (DataSnapshot ds : dataSnapshot.getChildren()){
                    //get data
                    String coins = ""+ds.child("coins").getValue();

                    int score = Integer.parseInt(coins);
                    

                    //set data
                    coinsTv.setText(score);
                    




            


                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

        addCoinsBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FirebaseDatabase database = FirebaseDatabase.getInstance();
                DatabaseReference coins = database.getReference("Users/"+ user.getUid() +"/coins");
                
                Integer  score =  score + 1;
                String scorefinal = Integer.toString(score);
                coins.setValue(scorefinal);


            }
        });

        return view;

    }

}


Merci à celles et ceux qui prendront le temps de me répondre d'une quelconque manière.
Krisix
A voir également:

1 réponse

BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 3 895
2 mars 2020 à 10:31
Bonjour,

Tu as un problème de portée de variable. Es-tu familiarisé avec cette notion ?
La durée de vie d'une variable est le bloc qui la comprend. Ici, tu as déclaré
score
dans ton
onDataChange()
. Du coup, une fois le déroulement de ta méthode terminé, ta variable est détruite. Si tu veux l'utiliser dans plusieurs méthodes, il faut la déclarer plus haut, en tant que variable de classe par exemple.

Note : Une fois ton souci précédent corrigé, la ligne suivante ne fonctionnera pas
Integer  score =  score + 1;

Tu déclares une variable qui existe déjà. Pour incrémenter une variable, utilises l'opération
++
0