Autore Topic: Non riesco a passare un dato da activity ad altra  (Letto 460 volte)

Offline triko

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S3
  • Sistema operativo:
    Windows 7
Non riesco a passare un dato da activity ad altra
« il: 18 Febbraio 2014, 19:31:44 CET »
0
Salve a tutti, come da titolo non riesco a passare un dato da un activity ad un altra!
Il dato vorrei farlo inserire all'utente e poi passarlo ma l'app è come se non lo vedesse.
Ho seguito questa guida: [facile] Passaggio di dati tra un'activity ed un'altra - Android Developers Italia  modificandola un pò per poter passare il dato ma niente da fare

Questo è la classe principale
Codice (Java): [Seleziona]
public class Player extends Activity
{
        Intent intent; 

        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                setContentView(R.layout.player);                                             
       
        Button button=(Button)findViewById(R.id.bDone);
        button.setOnClickListener(new View.OnClickListener()
        {                      
                        @Override
                        public void onClick(View v)
                        {
                                EditText number = (EditText)findViewById(R.id.etPlayer);
                                String s = number.getText().toString();
                               
                                //la seconda activity da lanciare
                            intent=new Intent(getApplicationContext(), Mixed.class);
                           
                            String pkg=getPackageName();
                           
                            intent.putExtra(pkg+".myString", s);      //inseriamo i dati nell'intent
                               
                            startActivity(intent); //facciamo partire la seconda activity                              
                        }
                });
        }
}

Mentre questa è la classe d'arrivo che però come risultato mi scrive 0, cioè il caso DEFAULT di getIntExtra

Codice (Java): [Seleziona]
public class Mixed extends Activity implements OnClickListener
{
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                setContentView(R.layout.mixed);
               
                Intent intent=getIntent(); // l'intent di questa activity
           
                String pkg=getPackageName();
       
                int i = intent.getIntExtra(pkg+".myInt", 0);                              
       
                TextView tv=(TextView)findViewById(R.id.tv);      
                tv.append("Players are: "+ i + "\n"); //visualizziamo i dati
         }
}
Qualcuno ha idea del perchè non funziona?!?!
O se sa un modo più facili per passare valori inseriti da utenti :D
Grazie a tutti!!!!!!!

Offline mirkus87

  • Utente junior
  • **
  • Post: 56
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
  • Play Store ID:
    Mirko Vitiello
  • Sistema operativo:
    Windows 7
Re:Non riesco a passare un dato da activity ad altra
« Risposta #1 il: 18 Febbraio 2014, 20:25:01 CET »
0
Nella prima activity quando passi il valore hai scritto ".myString" nella seconda activity (quella che dovrebbe ricevere il valore) hai scritto ".myInt". L'identificativo deve essere lo stesso.

Offline Noisemaker

  • Utente junior
  • **
  • Post: 58
  • Respect: +1
    • Mostra profilo
Re:Non riesco a passare un dato da activity ad altra
« Risposta #2 il: 07 Aprile 2014, 11:57:36 CEST »
0
Esatto, devi usare lo stesso nome. Io infatti consiglio spesso di utilizzare una sorta di define, tipo
Codice: [Seleziona]
public static final String EXTRA_MYDATA = "com.mypackage.extra.mydata";

quindi per la tua app sarebbe
Codice: [Seleziona]
public class Player extends Activity
{
        public static final String EXTRA_MYSTRING = "<nome package>.myString";
        Intent intent;

        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                setContentView(R.layout.player);                                             
       
        Button button=(Button)findViewById(R.id.bDone);
        button.setOnClickListener(new View.OnClickListener()
        {                     
                        @Override
                        public void onClick(View v)
                        {
                                EditText number = (EditText)findViewById(R.id.etPlayer);
                                String s = number.getText().toString();
                               
                                //la seconda activity da lanciare
                            intent=new Intent(getApplicationContext(), Mixed.class);                           
                            intent.putExtra(EXTRA_MYSTRING, s);      //inseriamo i dati nell'intent
                            startActivity(intent); //facciamo partire la seconda activity                             
                        }
                });
        }
}

Codice: [Seleziona]
public class Mixed extends Activity implements OnClickListener
{
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                setContentView(R.layout.mixed);
               
                Intent intent=getIntent(); // l'intent di questa activity
                int i = Integer.valueOf( intent.getStringExtra(Player.EXTRA_MYSTRING, "0") ); // se ti serve un int
                String i = intent.getStringExtra(Player.EXTRA_MYSTRING, "0") ; // se ti va bene anche una stringa
       
                TextView tv=(TextView)findViewById(R.id.tv);     
                tv.append("Players are: "+ i + "\n"); //visualizziamo i dati
         }
}

Ovviamente il tipo deve essere lo stesso da una parte e dall'altra, quindi pensa bene prima a cosa ti serve...in questo caso se ti serve un intero è meglio inviare direttamente un int già dalla prima activity