Il Forum è consultabile solo in modalità lettura. Per domande o consigli iscriviti al nostro GRUPPO FACEBOOK / COMMUNITY cliccando qui

android passare oggetti diversi e stringhe tra activity

Discussione in 'Development' iniziata da Bazz, 23 Nov 2012.

  1. Bazz

    Bazz Worker Droid

    Iscritto:
    9 Ago 2012
    Messaggi:
    61
    "Mi Piace":
    1
    ciao
    per favore potete dirmi come si fa a passare 2 o più oggetti differenti , oltre ad altri dati (stringhe, interi, ecc.)
    tra due attività ?
    grazie
    ciao
     
  2. acer1629

    acer1629 Worker Droid

    Iscritto:
    22 Ago 2012
    Messaggi:
    113
    "Mi Piace":
    22
    Credo che basti dichiarare l'oggetto come public static all'interno dell'activity padre.
     
  3. Bazz

    Bazz Worker Droid

    Iscritto:
    9 Ago 2012
    Messaggi:
    61
    "Mi Piace":
    1
    nel caso si ritorni dall'activity figlia all'activity padre e viceversa più volte succede qualcosa di spiacevole ?
     
  4. acer1629

    acer1629 Worker Droid

    Iscritto:
    22 Ago 2012
    Messaggi:
    113
    "Mi Piace":
    22
    Sto provando proprio in questo periodo tale passaggio ... non mi sembra ci siano grossi problemi, sto usando al momento il metodo .finish() per uscire dall'activity figlia e le variabili rimangono in memoria ... vorrei però capire se si può usare il metodo .destroy() in modo da poter gestire le activity come fossero singoli programmi con variabili che si creano e distruggono solo all'interno di se stessa.
     
  5. Bazz

    Bazz Worker Droid

    Iscritto:
    9 Ago 2012
    Messaggi:
    61
    "Mi Piace":
    1
    allora grazie , proverò
    ciao
     
  6. Bazz

    Bazz Worker Droid

    Iscritto:
    9 Ago 2012
    Messaggi:
    61
    "Mi Piace":
    1
    scusa , il codice seguente mi da un errore che non riesco a risolvere :

    Codice:
    	    		Intent intent = new Intent(RicercaActivity.this, ListaActivityParcelable.class);
    		    	intent.putExtra("city", city);
    		    	intent.putExtra("idCity", idCity);
    		    	intent.putExtra("desTipologia", tipologia.getTipologia());
    		    	intent.putExtra("indTipologia", tipologia.getId());		    	
    		    	intent.putExtra("categoria", categoria);
                    	    RicercaActivity.this.startActivity(intent);
    
    l'ultimo putExtra dovrebbe passare l'oggetto categoria come parcelable , l'activity ListaActivityParcelable fa la
    categoria = intent.getParcelableExtra("categoria");

    il putExtra non è accettato , mi dice : The method putExtra(String, boolean) in the type Intent is not applicable for the arguments (String, Categoria)

    come devo passare l'oggetto ?
    grazie, ciao
     
  7. acer1629

    acer1629 Worker Droid

    Iscritto:
    22 Ago 2012
    Messaggi:
    113
    "Mi Piace":
    22
    Categoria come l'hai dichiarato ?
     
  8. Bazz

    Bazz Worker Droid

    Iscritto:
    9 Ago 2012
    Messaggi:
    61
    "Mi Piace":
    1
    categoria è un oggetto (contiene 2 stringhe) ;
    ma per passare dati non si usa putExtra ? provando ad usare putParcelable...
    il sistema propone putParcelableArrayListExtra(name, value) , ma io non devo passare un ArrayList
     
  9. acer1629

    acer1629 Worker Droid

    Iscritto:
    22 Ago 2012
    Messaggi:
    113
    "Mi Piace":
    22
    Sinceramente non so come passare i dati tramite una chiamata tra due activity ... perchè quelle che mi servono io solitamente le passo dichiarandole public nella prima activity richiamandola poi nella seconda cosi :

    ActivityParent.nomevariabile

    Se Categoria è un oggetto allora l'errore è corretto, quel metodo putextra, da quello che dice eclipse, accetta solo un boolean come secondo parametro di input.

    Vedi sto esempio, magari ti aiuta :

    Codice:
    
    public class FirstIntent extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.firstintent);
    /*when we click this button z...we lunch a new Activity called SecondIntent but we send also 2 values...
    a string, and a int declared and initialized below...This values can be whatever you need to transmit to the other Intent..*/
    String value1="Example of String";
    int value2=3;
     Button z=(Button)findViewById(R.id.Button01);
     
     z.setOnClickListener(new OnClickListener(){
     
    			@Override
    			public void onClick(View v) {
    				 Intent intent = new Intent( getBaseContext(),SecondIntent.class);
     
                                      intent.putExtra("keyword1",value1);
                                      intent.putExtra("keyword2",value2);		
    		    startActivity( intent);
     
     
    			}}); 
    }
    }
    
    
    
    public class SecondIntent extends Activity{
    		 @Override
    	    public void onCreate(Bundle savedInstanceState) {
    	        super.onCreate(savedInstanceState);
    	        setContentView(R.layout.secondintent);
    	          Bundle extras=getIntent().getExtras();
    	     String value1=extras.getString("keyword1"));
    int value2=extras.getInt("keyword2");}
    //we have just loaded our values so we use them and display them in a Toast
     
      Toast.makeText(getBaseContext(), value1, Toast.LENGTH_LONG).show();
      Toast.makeText(getBaseContext(), value2, Toast.LENGTH_LONG).show();
    }
    }
    
    
     
  10. Bazz

    Bazz Worker Droid

    Iscritto:
    9 Ago 2012
    Messaggi:
    61
    "Mi Piace":
    1
    ok , grazie mille
    non avevo pensato di usare le variabili public .. , le userò anch'io ..
    ciao
     
  11. Bazz

    Bazz Worker Droid

    Iscritto:
    9 Ago 2012
    Messaggi:
    61
    "Mi Piace":
    1
    ciao acer1629
    ecco come usare parcelable e serializable :

    A-parcelable :

    -estendo la classe da passare come parcelable :

    Codice:
    //mancano le import ed il pckage
    public class CategoriaParce implements Parcelable{
    
    	private String id;
    	private String categoria;
    	
    	public CategoriaParce () 
    	{
    	}
    	
    	public CategoriaParce (Parcel in) 
    	{
    		readFromParcel(in);
    	}
    
    	
    	public void setId (String id) 
    	{
    		this.id = id;
    	}
    	
    	public void setCategoria (String categoria) 
    	{
    		this.categoria = categoria;
    	}
    	
    	public String  getId () 
    	{
    		return id;
    	}
    	
    	public String getCategoria () 
    	{
    		return categoria;
    	}
    
    
        public int describeContents() {
                return 0;
        }	
    
        public void writeToParcel(Parcel dest, int flags) {  
            dest.writeString(id);
            dest.writeString(categoria);
        }
        
        private void readFromParcel(Parcel in) {
            id = in.readString();
            categoria = in.readString();
        }
    	
        //@SuppressWarnings("unchecked")
        public static final Parcelable.Creator<CategoriaParce> CREATOR = new Parcelable.Creator <CategoriaParce>() {
                    public CategoriaParce createFromParcel(Parcel in) {
                        return new CategoriaParce(in);
                    }
         
                    public CategoriaParce[] newArray(int size) {
                        return new CategoriaParce[size];
                    }
         } ;
           
    }
    
    -chiamante :
    Codice:
    . . . . 
            // preparo l'oggetto da passare come parcelable
            CategoriaParce categ = new CategoriaParce();
    	categ.setId(tipologia.getCatTipologia().get(myItem).getId());
    	categ.setCategoria(tipologia.getCatTipologia().get(myItem).getCategoria());
    	//starto l'activity passando l'oggetto    		
    	Intent intent = new Intent(PrimaActivity.this, SecondaActivity.class);
        	intent.putExtra("desTipologia", tipologia.getTipologia());
        	intent.putExtra("indTipologia", tipologia.getId());		    	
        	intent.putExtra("categoria", categ);
            PrimaActivity.this.startActivity(intent);
    . . . . 
    
    -seconda activity :
    Codice:
    . . . . 
    CategoriaParce 	categoria ;
    . . . . .
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.lista);
    
        	Intent intent = getIntent();
        	desTipologia =  intent.getStringExtra("desTipologia");
        	indTipologia =  intent.getStringExtra("indTipologia");
        	categoria =  (CategoriaParce) intent.getExtras().getSerializable("categoria");
    
    

    B-serializable (ancora più semplice) :

    -estendo la classe oggetto da passare :
    Codice:
    public class Categoria  implements Serializable {
    
    	private String id;
    	private String categoria;
    		
    	public Categoria (String id , String categoria) 
    	{
    		this.id = id;
    		this.categoria = categoria;
    	}
    	
    	public String getId(){
    		return id;
    	}
    	public void setId(String id){
    		this.id = id;
    	}
    	
    	public String getCategoria() {
    		return categoria;
    	}
    	public void setCategoria(String categoria){
    		this.categoria = categoria;
    	}		
    	
    }
    
    -chiamante :
    Codice:
    . . . . 
    	Intent intent = new Intent(PrimaActivity.this, SecondaActivity.class);
    	intent.putExtra("desTipologia", tipologia.getTipologia());
    	intent.putExtra("indTipologia", tipologia.getId());		    	
    	intent.putExtra("categoria", tipologia.getCatTipologia().get(myItem));
    	PrimaActivity.this.startActivity(intent);
    . . . . 
    
    -chiamato :
    Codice:
    . . . .
    Categoria categoria;
    . . . . 
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.lista);
    
        	Intent intent = getIntent();
        	desTipologia =  intent.getStringExtra("desTipologia");
        	indTipologia =  intent.getStringExtra("indTipologia");
    
        	categoria =  (Categoria) intent.getExtras().getSerializable("categoria");
    
    . . . .
    
    spero ti serva
    ciao
     
  12. acer1629

    acer1629 Worker Droid

    Iscritto:
    22 Ago 2012
    Messaggi:
    113
    "Mi Piace":
    22
    Ciao,

    sicuramente a qualcuno tornerà utile ! :)

    Grazie per aver postato il codice !