Autore Topic: Passaggio di array bidimensionali tra due activity!  (Letto 1611 volte)

Offline bisemanu

  • Nuovo arrivato
  • *
  • Post: 43
    • Mostra profilo
  • Dispositivo Android:
    Motorola Defy+ Acer Liquid A1
  • Sistema operativo:
    Mac OS X 10.7 Windows 7
Passaggio di array bidimensionali tra due activity!
« il: 20 Aprile 2012, 09:25:42 CEST »
Salve ragazzi,
come posso procedere per passare dalla prima activity alla seconda un array bidimensionale di valori?
Grazie mille!

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7

Offline bisemanu

  • Nuovo arrivato
  • *
  • Post: 43
    • Mostra profilo
  • Dispositivo Android:
    Motorola Defy+ Acer Liquid A1
  • Sistema operativo:
    Mac OS X 10.7 Windows 7
Re:Passaggio di array bidimensionali tra due activity!
« Risposta #2 il: 20 Aprile 2012, 10:01:09 CEST »
ho gia dato uno sguardo a quel tutorial ma non riesco a usarlo col mio, praticamente io nel mio caso ho una matrice[j] di interi correttamente riempita da passare alla seconda attivita dove la prendo e la visualizzo. Nella attivitaA uso l'istruzione

intent.putExtra("numero_righe", r);//passo il numero di righe della matrice
intent.putExtra("numero_colonne", c);//passo il numero di colonne
intent.putExtra("matrice", matrice[j]);//passo la matrice
startActivity(intent);

nell'attivitaB:

int matricepassata[][];
Bundle extras = getIntent().getExtras();

righe = extras.getInt("numero_righe");
colonne = extras.getInt("numero_colonne");
matricepassata = new int[righe][colonne];
matricepassata[righe][colonne] = extras.getInt("matrice_prodotto[j]");

ovviamente questo passaggio funziona per i valori ma non per la matrice. Non sono uno esperto ne in java ne in android sto piano piano cercando di imparare

Offline undead

  • Utente senior
  • ****
  • Post: 666
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Passaggio di array bidimensionali tra due activity!
« Risposta #3 il: 20 Aprile 2012, 10:31:37 CEST »
Allora, hai due soluzioni.

La prima è trasformare il tuo array bidimensionale in un array monodimensionale ed usare semplicemente:

Codice (Java): [Seleziona]
Bundle myBundle=new Bundle();
myBundle.putIntArray("nomechiave", myIntArray);

e lo rileggi con:

Codice (Java): [Seleziona]
Bundle mybundle=getIntent().getExtras();
int[] myIntArray=mybundle.getIntArray("nomechiave");

La seconda soluzione è usare la serializzazione. In android onestamente non so cosa succeda ma in java ogni array (e conseguentemente ogni array di array) è serializzabile (immagina che al contrario del C/C++ quando scrivi  [] tu stai effettivamente cambiando il TIPO di dato).

In quel caso dovresti poter passare direttamente (ripeto, se android è come il java classico) il tuo dato nell'intent con:

Codice (Java): [Seleziona]
myIntent.putExtra("miachiave",(Serializable)myIntArray);
 :-)

Offline bisemanu

  • Nuovo arrivato
  • *
  • Post: 43
    • Mostra profilo
  • Dispositivo Android:
    Motorola Defy+ Acer Liquid A1
  • Sistema operativo:
    Mac OS X 10.7 Windows 7
Re:Passaggio di array bidimensionali tra due activity!
« Risposta #4 il: 20 Aprile 2012, 13:45:55 CEST »
allora ho provato in questo modo:

attivitaA:

intent.putExtra("righeP", righe);   //passa il numero di righe
intent.putExtra("colonneP", ccolonne);    //passa il numero di colonne

intent.putExtra("matrice",  (Serializable)matrice1);   //passaggio matrice
startActivity(intent);

e la richiamo nella attivitaB con:

Bundle extras = getIntent().getExtras();
       
r = extras.getInt("righeP"); //prende il numero di righe
c = extras.getInt("colonneP");  //prende il numero di colonne
matrice = new int[r][c]; //dimensiona la matrice
   
matrice[r][c] =  (Integer) extras.getSerializable("matrice");  //prende dalla attivitaA la matrice1

questo e quanto, ma non sta andando. Qualcuno mi aiuta?
       

Offline undead

  • Utente senior
  • ****
  • Post: 666
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Passaggio di array bidimensionali tra due activity!
« Risposta #5 il: 20 Aprile 2012, 16:07:16 CEST »
matrice[r][c] =  (Integer) extras.getSerializable("matrice");  //prende dalla attivitaA la matrice1 
In questa riga ci sono 3 errori.

Il primo è che matrice[r][c] indica il valore intero nella matrice alla posizione r e c, non la matrice.
Il secondo errore è che se la matrice ha dimensione r e c puoi accedere da fino a matrice[r-1][c-1], perchè gli indici partono da 0, non da 1. Quindi avrai un indexoutofbounds excpetion.
Il terzo errore è che fai un cast su Integer che non solo non è un int ma con gli array non c'entra nulla.

Prova così:
Codice (Java): [Seleziona]
matrice =  (int[][]) extras.getSerializable("matrice");  //prende dalla attivitaA la matrice1 
 :-)

Offline bisemanu

  • Nuovo arrivato
  • *
  • Post: 43
    • Mostra profilo
  • Dispositivo Android:
    Motorola Defy+ Acer Liquid A1
  • Sistema operativo:
    Mac OS X 10.7 Windows 7
Re:Passaggio di array bidimensionali tra due activity!
« Risposta #6 il: 20 Aprile 2012, 16:30:22 CEST »
non voglio abusare della tua pazienza, ma niente non va nemmeno cosi..  :-(

Offline bisemanu

  • Nuovo arrivato
  • *
  • Post: 43
    • Mostra profilo
  • Dispositivo Android:
    Motorola Defy+ Acer Liquid A1
  • Sistema operativo:
    Mac OS X 10.7 Windows 7
Re:Passaggio di array bidimensionali tra due activity!
« Risposta #7 il: 21 Aprile 2012, 19:42:54 CEST »
ho provato trasformando il mio array bidimensionale in monodimensionale per poter passarlo da activityA ad activityB questo è il codice:

ActivityA:

Bundle myBundle = new Bundle();
myBundle.putIntArray("myarray", array);
startActivity(intent);

ActivityB:

Bundle myBundle = getIntent().getExtras();
int[] myIntArray = myBundle.getIntArray("myarray");

il passaggio sembra farlo ma non riesco ad usare l'array passato.

Offline bisemanu

  • Nuovo arrivato
  • *
  • Post: 43
    • Mostra profilo
  • Dispositivo Android:
    Motorola Defy+ Acer Liquid A1
  • Sistema operativo:
    Mac OS X 10.7 Windows 7
Re:Passaggio di array bidimensionali tra due activity!
« Risposta #8 il: 22 Aprile 2012, 14:06:19 CEST »
Ho risolto in questo modo:

ActivityA:

Intent intent = new Intent(this, secondaAttivita.class);
intent.putExtra("myVettore", vettore);

ActivityB:

int[] vettore = getIntent().getIntArrayExtra("myVettore");

grazie mille per l'idea di trasformare la matrice in un vettore. :-)