Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di vegasy
    Registrato dal
    Dec 2010
    Messaggi
    47

    [Android] Dove ho sbagliato?

    Salve, sono quasi nuovo =) in pratica avrò postato poche volte.
    Sono da poco a programmare con android e stavo eseguendo questo codice
    codice:
    package it.camaleonte.training;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.*;
    import android.view.View;
    
    public class TrainingProjectActivity extends Activity {
    	
    	int counter = 0;
        
        String value = getResources().getString(R.string.output_label, counter++);	
        
        Button pressButton = (Button) findViewById(R.id.idPressButton);
    	
        TextView outputView = (TextView) findViewById(R.id.idTextOutput);
    	
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            pressButton.setOnClickListener(new View.OnClickListener()
            {
            	public void onClick(View v)
            	{
            		outputView.setText(value);
            	}
            });
        }
    }
    In pratica mi va in crash l'app. prima di modificare il codice, mi funzionava (o quasi). o almeno non mi crashava. vi riporto il codice prima del crash.

    codice:
    package it.camaleonte.training;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.*;
    import android.view.View;
    
    public class TrainingProjectActivity extends Activity {
    	
    	int counter = 0;
    	
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            final String value = getResources().getString(R.string.output_label, counter++);
            
            Button pressButton = (Button) findViewById(R.id.idPressButton);
    
            final TextView outputView = (TextView) findViewById(R.id.idTextOutput);
            
            pressButton.setOnClickListener(new View.OnClickListener()
            {
            	public void onClick(View v)
            	{
            		outputView.setText(value);
            	}
            });
        }
    }
    in pratica ho spostato quelle 3 righe di codice prima dentro ad onCreate e poi fuori.
    penso sia stato quello il problema, ma dovrei capire esattamente il perchè, se qualcuno è in grado.

    non includo main.xml e strings.xml perchè sono sempre stati corretti e mai modificati.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Semplicemente perchè non puoi eseguire del codice al di fuori di un metodo. Fuori dai metodi puoi inserire solamente dichiarazioni (ed eventualmente inizializzazioni di queste).

    PS: magari la prossima volta riporta anche i messaggi d'errore che ottieni dal compilatore e cerca di usare dei titoli che diano l'idea del contenuto della discussione... "Dove ho sbagliato" non dice nulla dell'errore specifico che hai tu.



    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di vegasy
    Registrato dal
    Dec 2010
    Messaggi
    47
    ok, intanto ti ringrazio =)
    è tanto che non programmo ad oggetti ed ho perso un po le regole base. in effetti ho fatto un errore da noob.

    Riguardo sempre al codice in questione (quello giusto dico), l'app non mi incrementa il contatore.
    probabilmente sto sbagliando grossolanamente anche su questo, sto provando a fare dei tentativi, ma ancora ho gli occhi appannati e non riesco a sbloccare la cosa.

    L'esecuzione dell'applicazione da il seguente risultato: appena clicko sul bottone, mi visualizza il numero attuale della variabile counter e continuando a clickare il numero non cambia.

    premetto che con la variabile nella solita posizione ho avuto modo di aumentare il contatore con il seguente pezzetto di codice
    codice:
    outputView.setText("click #" + counter++);
    per finire, se inserisco counter++ anche dopo il metodo setText() sopra indicato, il valore rimane senpre a '0'

    grazie ancora

  4. #4
    Dovresti dichiarare counter come final static, in modo che diventi una proprietà della classe.
    Come l'hai dichiarato ora è una proprietà dell'istanza, e quindi ad ogni nuova istanza questo viene inizializzato a 0.
    ...

  5. #5
    Utente di HTML.it L'avatar di vegasy
    Registrato dal
    Dec 2010
    Messaggi
    47
    In verità voglio che sia dell'istanza. e che parta da 0 ad ogni nuova istanza.

    Inoltre se lo dichiaro come final static non posso assegnarlo a
    final String value = getResources().getString(R.string.output_label, counter++);

    il dubbio che mi viene è che con il codice
    outputView.setText("click #" + counter++);
    al posto di
    outputView.setText(value);
    mi funzionava e quindi, deduco, che la variabile sia giusta.

    il problema è sorto quando ho iniziato ad utilizzare il metodo getResources();

    p.s. sto seguendo un manuale, il manuale però non mi indica la posizione dei pezzetti di codice ed io vado per tentativi.
    inoltre, secondo il manuale, il pezzo di codice
    final String value = getResources().getString(R.string.output_label, counter++);
    lui me lo scrive così
    String value = getResources().getString(R.string.output_label, counter++);
    però se non lo segnalo come final mi da un errore di sintassi.

  6. #6
    Utente di HTML.it L'avatar di vegasy
    Registrato dal
    Dec 2010
    Messaggi
    47

    Risolto!

    Risolto!

    Ho erroneamente ipotizzato una programmazione strutturata alla vecchia maniera C/C++.

    Le dichiarazioni vengono eseguite una e una sola volta, quindi devo inserirle all'interno del costrutto caratterizzante l'evento onClickListener() per aggiornare il valora ogni volta.

    grazie comunque

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.