Autore Topic: errore final class int roba strana aiuto  (Letto 253 volte)

Offline EkStudio

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xperia Z2
  • Sistema operativo:
    Android 4.4, Windows 8/8.1
errore final class int roba strana aiuto
« il: 23 Settembre 2014, 20:28:00 CEST »
0

Errore: Error:(28, 17) error: cannot assign a value to final variable contatore

Citazione

public class Click extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_click);

        final int contatore = 0;

        final TextView texttap=(TextView)findViewById(R.id.tap);

        Button btntap =(Button)findViewById(R.id.btntap);

        btntap.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                contatore++;
                texttap.setText("Hai tappato " + contatore + " volte!");
            }
        });


    }


se provo a togliere final alla variabile contatore mi dice

Error:(28, 17) error: local variable contatore is accessed from within inner class; needs to be declared final

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:errore final class int roba strana aiuto
« Risposta #1 il: 23 Settembre 2014, 21:35:37 CEST »
0
Non è roba strana... sono le basi di java.  :-)

Se dichiari una variabile dentro OnCreate, tale variabile avrà vita molto limitata, sarà inaccessibile non appena terminata l'esecuzione della OnCreate. Il listener OnClick invece sopravvive, perchè lo "attacchi" al button. Quindi nel listener non puoi usare la variabile dichiarata normalmente perchè sarà distrutta quando qualcuno cliccherà sul button (molto dopo la fine di OnCreate). Ti suggeriscono di definirla final perchè in quel modo il compilatore sa che valore ha anche dopo la fine di OnCreate, ma ha la controindicazione che puoi assegnarle il valore solo una volta e non cambiarla più (questa la ragione dell'altro errore).

Se ci hai capito poco, ti consiglio di studiare un po' di java, perchè è dura andare avanti senza questi concetti.

Intanto la soluzione al tuo problema: sposta la dichiarazione variabile subito prima la OnCreate e togli il final.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store