Autore Topic: Help Void  (Letto 508 volte)

Offline Tiru

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows 10
Help Void
« il: 05 Giugno 2017, 09:04:57 CEST »
0
Salve, devo fare un controllo all'interno di "public void onDataChange" e se trova un elemento uguale cambia una booleana ma il cambiamento ha effetto solo in quel metodo come faccio a mantenere il valore al di fuori di quel metodo?
ho provato ad usare gli array affinchè li salvi nella memoria come in c++  ma qui non funziona
ovviamente il controllo risulta positivo se controllo nel metodo

public void contr_nick() {

        final DatabaseReference database = firebaseDatabase.getReference().child("Nickname");
        database.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                max = (int) dataSnapshot.getChildrenCount();
                reg_name = r_name.getText().toString();
                for (int i = 0; i < max; i++) {
                    if (reg_name.equals(dataSnapshot.child(String.valueOf((i))).getValue().toString())) {
                        bol[0]=true;
                    }
                }

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });   
   if bol[0]) {
                us_error.setVisibility(View.VISIBLE);
                Toast toast = Toast.makeText(getApplicationContext(), "Username già in uso", Toast.LENGTH_SHORT);
                toast.show();
            }

        if (!bol[0])
               sign_up(reg_email, reg_pwd);
    }

Offline iClaude

  • Utente normale
  • ***
  • Post: 311
  • Respect: +25
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:Help Void
« Risposta #1 il: 05 Giugno 2017, 12:29:04 CEST »
0
Il controllo devi farlo all'interno di onDataChange, perché la richiesta è asincrona (scarica i dati da internet,  ci vuole tempo).
Nel tuo caso controlli la variabile booleana subito, cioè prima che il dato venga aggiornato.

Offline Tiru

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows 10
Re:Help Void
« Risposta #2 il: 05 Giugno 2017, 13:07:49 CEST »
0
ah ok, capito ma cosa mi consigli di fare?, hai scritto di fare il controllo all'interno di onDataChange ma lo è gia, sto provando a cercare se c'è un metodo "dopo che i dati sono cambiati" ma per ora nulla 

Offline iClaude

  • Utente normale
  • ***
  • Post: 311
  • Respect: +25
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:Help Void
« Risposta #3 il: 05 Giugno 2017, 13:21:13 CEST »
0
La parte di codice che segue l'aggiunta del listener va messa in onDataChange, oppure crei un metodo distinto e lo richiami da lì.
In sostanza,  solo quando è chiamato onDataChange hai i dati aggiornati, quindi è da lì che devi partire.

Offline Tiru

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows 10
Re:Help Void
« Risposta #4 il: 05 Giugno 2017, 13:49:58 CEST »
0
perfetto risolto.. non esco dal metodo ma richiamo direttamente all'interno di esso un altro metodo che però da esso dopo aver registrato i dati in firebase passa ad un altra activity e quindi la chiamata del metodo viene chiusa per forza, testando l'app non sembra dare problemi, ma per curiosità non sto un po "forzando gli schemi"?

Offline iClaude

  • Utente normale
  • ***
  • Post: 311
  • Respect: +25
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:Help Void
« Risposta #5 il: 05 Giugno 2017, 13:52:11 CEST »
0
Non ho capito ciò che hai scritto...

Offline Tiru

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows 10
Re:Help Void
« Risposta #6 il: 05 Giugno 2017, 13:56:41 CEST »
0
mi trovo nel metodo onDataChange e da qua richiamo un altro metodo, chiamiamolo PIPPO
all'interno di PIPPO ho un
Intent i = new Intent (this, New.class);
startActivity(i);

questo mi porta alla nuova activity, dunque non torna piu nulla al metodo onDataChange, è giusto farlo? mi sembra forzata come cosa

Post unito: 05 Giugno 2017, 13:58:18 CEST
comunque GRAZIE!!
« Ultima modifica: 05 Giugno 2017, 13:58:18 CEST da Tiru, Reason: Merged DoublePost »

Offline iClaude

  • Utente normale
  • ***
  • Post: 311
  • Respect: +25
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:Help Void
« Risposta #7 il: 05 Giugno 2017, 14:03:49 CEST »
0
In onDataChange PRIMA recuperi i dati che ti servono,  dopodichè puoi fare ciò che vuoi.
In ogni caso se chiami startActivity il codice che segue è cmq eseguito,  a meno che non termini l'Activity, quindi onDataChange viene eseguito interamente. Prova a mettere un Log e vedrai che lo esegue.