Autore Topic: Problema con la memorizzazione delle variabili  (Letto 1071 volte)

Offline Dysprositos

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Acer Iconia B1
  • Sistema operativo:
    Windows
Problema con la memorizzazione delle variabili
« il: 17 Dicembre 2013, 15:31:52 CET »
0
Sto creando questa applicazione: ci sono una serie di pulsanti (in questo momento solo due ma me ne serviranno 11) che cliccandoci sopra generano un numero random (dallo 0 al 6) e vorrei che man mano che si premono i pulsanti, mi mantenga il conteggio di quante volte è uscito un determinato numero.
Ho provato con una variabile Int (Righe 32 - 63 - 105) ma ogni volta che clicco l'altro pulsante questa variabile torna a 0 e non si incrementa.
Come posso fare?
Già che ci sono vi faccio un'altra domanda, è possibile far si che un pulsante sia cliccabile solamente una volta?

Codice (Java): [Seleziona]
package com.NiUrSoftware.box;

import java.util.Random;
import com.NiUrSoftware.box.R;
import android.os.Bundle;
import android.app.Activity;
import android.widget.Button;
import android.widget.TextView;
import android.view.View;
import android.view.View.OnClickListener;


public class MainActivity extends Activity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
               
                //Generare l'istruzione per eseguire il random
                final Random myRandom = new Random();
               
               
                //Definizione nomi oggetti presenti nella schermata visualizzata (activity_main)
                Button Premi1 = (Button)findViewById(R.id.button1);
                final Button Premi2 = (Button)findViewById(R.id.button2);
                final TextView Azione1 =(TextView)findViewById(R.id.textView1);
                final TextView Azione2 =(TextView)findViewById(R.id.textView2);
                final TextView Risultato = (TextView)findViewById(R.id.textView6);
                final int Reti;
               
                               
                //Azione svolta premendo PULSANTE1
                        Premi1.setOnClickListener(new OnClickListener(){               
               
                //Genera numero e scrivi una parola     PULSANTE 1
       
                @Override
                public void onClick(View v) {
                        // TODO Auto-generated method stub
                                               
                        if (myRandom.nextInt(6) >= 5) {
                                Azione1.setText(String.valueOf("CINQUE"));
               
                        }
                                                else if (myRandom.nextInt(6) >= 4){
                                Azione1.setText(String.valueOf("QUATTRO"));

                        }
                                                else if (myRandom.nextInt(6) >= 3){
                                Azione1.setText(String.valueOf("TRE"));

                        }                      
                                                else if (myRandom.nextInt(6) >= 2){
                                Azione1.setText(String.valueOf("DUE"));


                        }
                                                else if (myRandom.nextInt(6) >= 1){
                                Azione1.setText(String.valueOf("GOL"));
                                int Reti = 1;
                                Risultato.setText(String.valueOf(Reti));
                               
                        }
                                                else {
                                Azione1.setText(String.valueOf("ZERO"));

                        }
                       
                       
                }});
               
                        //Azione svolta premendo PULSANTE2
                        Premi2.setOnClickListener(new OnClickListener(){               
               
                //Genera numero e scrivi una parola     PULSANTE 2
                @Override
                public void onClick(View v) {
                        // TODO Auto-generated method stub
                                               
                        if (myRandom.nextInt(6) >= 5) {
                                Azione2.setText(String.valueOf("CINQUE"));


                                }
                                                else if (myRandom.nextInt(6) >= 4){
                                Azione2.setText(String.valueOf("QUATTRO"));


                        }
                                                else if (myRandom.nextInt(6) >= 3){
                                Azione2.setText(String.valueOf("TRE"));


                        }                      
                                                else if (myRandom.nextInt(6) >= 2){
                                Azione2.setText(String.valueOf("DUE"));


                        }
                                                else if (myRandom.nextInt(6) >= 1) {
                                Azione2.setText(String.valueOf("GOL"));
                                int Reti = Reti + 1;
                                Risultato.setText(String.valueOf(Reti));
                        }

                        else {
                                Azione2.setText(String.valueOf("ZERO"));

                        }      
        }});
                       

                       
                       
                       
                       
                       
                        }
       
        }
« Ultima modifica: 17 Dicembre 2013, 16:26:51 CET da Dysprositos »

Offline Dysprositos

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Acer Iconia B1
  • Sistema operativo:
    Windows
Re:Problema con la memorizzazione delle variabili
« Risposta #1 il: 18 Dicembre 2013, 16:10:00 CET »
0
Smanetta e smanetta ho risolto da solo, memorizzando con SharedPreferences le variabili che mi interessano.

Chiedo comunque cortesemente se è il modo corretto per affrontare questo problema o se ho scelto la strada giusta.

Eccovi come ho modificato il codice:

Codice (Java): [Seleziona]
package com.NiUrSoftware.box;

import java.util.Random;
import com.NiUrSoftware.box.R;
import android.os.Bundle;
import android.app.Activity;
import android.widget.Button;
import android.widget.TextView;
import android.view.View;
import android.view.View.OnClickListener;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;



public class MainActivity extends Activity {



        protected static final int RetiA1 = 1;
        protected static final int RetiA2 = 1;
        protected static int RetiA;
       

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
               
                //Generare l'istruzione per eseguire il random
                final Random myRandom = new Random();
               
               
                //Definizione nomi oggetti presenti nella schermata visualizzata (activity_main)
                Button Premi1 = (Button)findViewById(R.id.button1);
                final Button Premi2 = (Button)findViewById(R.id.button2);
                final TextView Azione1 =(TextView)findViewById(R.id.textView1);
                final TextView Azione2 =(TextView)findViewById(R.id.textView2);
                final TextView Risultato = (TextView)findViewById(R.id.textView6);
                final SharedPreferences prefs = getPreferences(MODE_PRIVATE);
               
                               
                //Azione svolta premendo PULSANTE1
                        Premi1.setOnClickListener(new OnClickListener(){               
               
                //Genera numero e scrivi una parola     PULSANTE 1
       
                @Override
                public void onClick(View v) {
                        // TODO Auto-generated method stub
                                               
                        if (myRandom.nextInt(6) >= 5) {
                                Azione1.setText(String.valueOf("CINQUE"));
               
                        }
                                                else if (myRandom.nextInt(6) >= 4){
                                Azione1.setText(String.valueOf("QUATTRO"));

                        }
                                                else if (myRandom.nextInt(6) >= 3){
                                Azione1.setText(String.valueOf("TRE"));

                        }                      
                                                else if (myRandom.nextInt(6) >= 2){
                                Azione1.setText(String.valueOf("DUE"));


                        }
                                                else if (myRandom.nextInt(6) >= 1){
                                Azione1.setText(String.valueOf("GOL"));
                                Editor prefsEditor = prefs.edit();
                                prefsEditor.putInt("RetiA1",1);
                                prefsEditor.commit();
                                Risultato.setText(String.valueOf(RetiA1));
                               
                        }
                                                else {
                                Azione1.setText(String.valueOf("ZERO"));

                        }
                       
                       
                }});
               
                        //Azione svolta premendo PULSANTE2
                        Premi2.setOnClickListener(new OnClickListener(){               
               
                //Genera numero e scrivi una parola     PULSANTE 2
                @Override
                public void onClick(View v) {
                        // TODO Auto-generated method stub
                                               
                        if (myRandom.nextInt(6) >= 5) {
                                Azione2.setText(String.valueOf("CINQUE"));


                                }
                                                else if (myRandom.nextInt(6) >= 4){
                                Azione2.setText(String.valueOf("QUATTRO"));


                        }
                                                else if (myRandom.nextInt(6) >= 3){
                                Azione2.setText(String.valueOf("TRE"));


                        }                      
                                                else if (myRandom.nextInt(6) >= 2){
                                Azione2.setText(String.valueOf("DUE"));


                        }
                                                else if (myRandom.nextInt(6) >= 1) {
                                Azione2.setText(String.valueOf("GOL"));
                                Editor prefsEditor = prefs.edit();
                                prefsEditor.putInt("RetiA2",1);
                                prefsEditor.commit();
                                int Reti = RetiA1 + RetiA2;    
                                Risultato.setText(String.valueOf(Reti));
                        }

                        else {
                                Azione2.setText(String.valueOf("ZERO"));

                        }      
        }});
                       

                       
                       
                       
                       
                       
                        }
       
        }

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:Problema con la memorizzazione delle variabili
« Risposta #2 il: 18 Dicembre 2013, 16:27:38 CET »
0
Smanetta e smanetta ho risolto da solo, memorizzando con SharedPreferences le variabili che mi interessano.

Chiedo comunque cortesemente se è il modo corretto per affrontare questo problema o se ho scelto la strada giusta.

Si, per memorizzare un numero finito e limitato di variabili, le SharedPreferences vanno bene.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Dysprositos

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Acer Iconia B1
  • Sistema operativo:
    Windows
Re:Problema con la memorizzazione delle variabili
« Risposta #3 il: 18 Dicembre 2013, 18:02:22 CET »
0
In realtà testandolo l'applicazione il problema non si è risolto, era solo un'illusione.

Infatti, sostituendo i due valori iniziali di RetiA1 e RetiA2 come indicato qua

Codice (Java): [Seleziona]
protected static final int RetiA1 = 0;
        protected static final int RetiA2 = 0;
        protected static int RetiA;

Il numero, si dovrebbe memorizzare, andando a sostituire lo 0 iniziale nel momento in qui la condizione if sia vera, mentre invece anche qual'ora la condizione sia vera, il dato non si aggiorna.
PER ESEMPIO:
- Se cliccando il primo pulsante non esce il numero 1 e cliccando sul secondo pulsante esce il numero 1, il conto di "Reti" dovrebbe essere 1 invece scrive 2.

Ho provato anche a sostituire lo zero con "null" ma mi d'ha errore


Offline Paso

  • Utente junior
  • **
  • Post: 98
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy sIII mini
  • Sistema operativo:
    Linux Mint 17 64-bit
Re:Problema con la memorizzazione delle variabili
« Risposta #4 il: 18 Dicembre 2013, 21:35:23 CET »
0
SharedPreferences devi usarlo se vuoi gli stessi risultati che avevi prima di chiudere l'app. A me sembra che tu abbia altre intenzioni e problemi.
Se ho ben capito basta che sostituisci tutta quella parte con un semplice
Codice (Java): [Seleziona]
RetiA1++; e dopo
Codice (Java): [Seleziona]
RetiA2++;Inoltre ti consiglio di usare uno switch in questo modo:
Codice (Java): [Seleziona]
String string;
//...
Premi1.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View arg0) {
                                int rnd = myRandom.nextInt(6);
                                switch (rnd) {
                                case 5:
                                        string = "CINQUE";
                                        break;
                                case 4:
                                        string = "QUATTRO";
                                        break;
                                case 3:
                                        string = "TRE";
                                        break;
                                case 2:
                                        string = "DUE";
                                        break;
                                case 1:
                                        string = "GOL";
                                        RetiA1++;
                    Risultato.setText(String.valueOf(RetiA1));
                                        break;
                                case 0:
                                        string = "ZERO";
                                        break;
                                default:
                                        break;
                                }      
                                Azione1.setText(string);
                        }//chiudo onClick
                });//chiudo onClickListener
               
                Premi2.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View arg0) {
                                int rnd = myRandom.nextInt(6);
                                switch (rnd) {
                                case 5:
                                        string = "CINQUE";
                                        break;
                                case 4:
                                        string = "QUATTRO";
                                        break;
                                case 3:
                                        string = "TRE";
                                        break;
                                case 2:
                                        string = "DUE";
                                        break;
                                case 1:
                                        string = "GOL";
                                        RetiA2++;
                                        int Reti = RetiA1 + RetiA2;
                    Risultato.setText(String.valueOf(Reti));
                                        break;
                                case 0:
                                        string = "ZERO";
                                        break;
                                default:
                                        break;
                                }      
                                Azione2.setText(string);
                        }//chiudo onClick
                });//chiudo onClickListener

Spero di aver capito il tuo problema...

Offline Dysprositos

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Acer Iconia B1
  • Sistema operativo:
    Windows
Re:Problema con la memorizzazione delle variabili
« Risposta #5 il: 19 Dicembre 2013, 09:49:45 CET »
0
Il problema lo hai capito perfettamente, ora ho modificato il codice come mi hai indicato tu, l'unico errore che mi segna eclipse è all'inizio quando dichiaro le due variabili RetiA1++ e RetiA2++, dovè che sbaglio?

Codice (Java): [Seleziona]
                //Definizione nomi oggetti presenti nella schermata visualizzata (activity_main)
                Button Premi1 = (Button)findViewById(R.id.buttonA1);
                final Button Premi2 = (Button)findViewById(R.id.buttonA2);
                final TextView Azione1 =(TextView)findViewById(R.id.textViewA1);
                final TextView Azione2 =(TextView)findViewById(R.id.textViewA2);
                final TextView Risultato = (TextView)findViewById(R.id.textViewA6);
                final int RetiA1++;
                final int RetiA2++;


Tieni presente che quello che a me serve è un valore numerico e non un testo.
eccoti il codice completo.
Grazie in anticipo.

Codice (Java): [Seleziona]
package com.NiUrSoftware.box;

import java.util.Random;
import com.NiUrSoftware.box.R;
import android.os.Bundle;
import android.app.Activity;
import android.widget.Button;
import android.widget.TextView;
import android.view.View;
import android.view.View.OnClickListener;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;



public class MainActivity extends Activity {


        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
               
                //Generare l'istruzione per eseguire il random
                final Random myRandom = new Random();
               
               
                //Definizione nomi oggetti presenti nella schermata visualizzata (activity_main)
                Button Premi1 = (Button)findViewById(R.id.buttonA1);
                final Button Premi2 = (Button)findViewById(R.id.buttonA2);
                final TextView Azione1 =(TextView)findViewById(R.id.textViewA1);
                final TextView Azione2 =(TextView)findViewById(R.id.textViewA2);
                final TextView Risultato = (TextView)findViewById(R.id.textViewA6);
                final int RetiA1++;
                final int RetiA2++;
               
               
               
               
                               
                //Azione svolta premendo PULSANTE1
                        Premi1.setOnClickListener(new OnClickListener(){               
               
                //Genera numero e scrivi una parola     PULSANTE 1
       
                                 @Override
                 public void onClick(View arg0) {
                         int rnd1 = myRandom.nextInt(6);
                                                switch (rnd1) {
                         case 5:
                                 if (rnd1 >= 5) {
                                                Azione1.setText(String.valueOf("CINQUE"));
                                                }
                                 break;
                         case 4:
                                 if (rnd1 >= 4) {
                                                Azione1.setText(String.valueOf("QUATTRO"));
                                                }
                                 break;
                         case 3:
                                 if (rnd1 >= 3) {
                                                Azione1.setText(String.valueOf("TRE"));
                                                }
                                 break;
                         case 2:
                                 if (rnd1 >= 2) {
                                                Azione1.setText(String.valueOf("DUE"));
                                                }
                                 break;
                         case 1:
                                 if (rnd1 >= 1) {
                                                Azione1.setText(String.valueOf("GOAL"));
                                                }
                                 RetiA1++;
                                 Risultato.setText(String.valueOf(RetiA1));
                                 break;
                         case 0:
                                 if (rnd1 >= 0) {
                                                Azione1.setText(String.valueOf("ZERO"));
                                                }
                                 break;
                         default:
                                 break;
                         }      
                 }//chiudo onClick
         });//chiudo onClickListener
               
                        //Azione svolta premendo PULSANTE2
                        Premi2.setOnClickListener(new OnClickListener(){               
               
                //Genera numero e scrivi una parola     PULSANTE 2
                                public void onClick(View arg0) {
                    int rnd2 = myRandom.nextInt(6);
                                        switch (rnd2) {
                    case 5:
                         if (rnd2 >= 5) {
                                        Azione2.setText(String.valueOf("CINQUE"));
                                        }
                            break;
                    case 4:
                         if (rnd2 >= 4) {
                                        Azione2.setText(String.valueOf("QUATTRO"));
                                        }
                            break;
                    case 3:
                         if (rnd2 >= 3) {
                                        Azione2.setText(String.valueOf("TRE"));
                                        }
                            break;
                    case 2:
                         if (rnd2 >= 2) {
                                        Azione2.setText(String.valueOf("DUE"));
                                        }
                            break;
                    case 1:
                         if (rnd2 >= 1) {
                                        Azione2.setText(String.valueOf("GOAL"));
                                        }
                            RetiA2++;
                                                int Reti = RetiA1 + RetiA2;
                            Risultato.setText(String.valueOf(Reti));
                            break;
                    case 0:
                         if (rnd2 >= 0) {
                                        Azione2.setText(String.valueOf("ZERO"));
                                        }
                            break;
                    default:
                            break;
                    }      
            }//chiudo onClick
    });//chiudo onClickListener
        }
}

Offline Paso

  • Utente junior
  • **
  • Post: 98
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy sIII mini
  • Sistema operativo:
    Linux Mint 17 64-bit
Re:Problema con la memorizzazione delle variabili
« Risposta #6 il: 19 Dicembre 2013, 17:02:36 CET »
0
Basi del java:
Codice (Java): [Seleziona]
int numero = 0;
//scrivere
numero = numero + 1;
//è come scrivere
numero++;
Quando dichiari RetiA1 non devi mettere ++ dopo!!!