Autore Topic: Passaggio di oggetti tra activity  (Letto 690 volte)

Offline Peppin2o

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Windows 8.1 Pro x64
Passaggio di oggetti tra activity
« il: 10 Novembre 2013, 11:22:19 CET »
0
Buongiorno developers  ;-)

Devo passare un oggetto SaveOrderData tra due activity: la prima lo istanzia, mentre la seconda ne modifica un attributo di tipo List<ProdottoFinito>.
Ho provato a implementare Serializable per l'oggetto che viene passato tra le activity:
Codice (Java): [Seleziona]
public class SaveOrderData implements Serializable{
       
        private static final long serialVersionUID = 1L;
        private List<ProdottoFinito> prodotti;
        private List <Bibita> bibite;
       
        private static String url_push_order = "http://192.168.1.2:80/cooking/push_order.php";
        private static String url_push_product_list = "http://192.168.1.2:80/cooking/push_product_list.php";
        private static String url_push_drink_list = "http://192.168.1.2:80/cooking/push_drink_list.php";
        private ProgressDialog pDialog;
        JSONParser jParser = new JSONParser();
        private static final String TAG_SUCCESS = "success";
        private String nome, cognome, data;
        private int idTavolo;
        List p;
        List b;
       
       
        public SaveOrderData(String nome, String cognome, String data, String idTavolo){
                this.nome = nome;
                this.cognome = cognome;
                this.data=data;
                this.idTavolo=Integer.parseInt(idTavolo);
                prodotti = new ArrayList<ProdottoFinito>();
                bibite = new ArrayList<Bibita>();
               
                List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("nome", nome));
        params.add(new BasicNameValuePair("cognome", cognome));
        params.add(new BasicNameValuePair("data", data));
        params.add(new BasicNameValuePair("idTavolo", idTavolo));
        // getting JSON Object
        // Note that create product url accepts POST method
        JSONObject json = jParser.makeHttpRequest(url_push_order,
                "POST", params);

        // check log cat fro response
        Log.d("Create Response", json.toString());

        // check for success tag
        try {
            int success = json.getInt(TAG_SUCCESS);

            if (success == 1) {
               
            } else {
                // failed to create product
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        }


        public void convertToJSONProdotti(){
                p = Arrays.asList(prodotti);
                Gson gson = new Gson();
                String jsonP = gson.toJson(p);
                executeTransferProdotti(jsonP);
        }
       
        public void convertToJSONBibite(){
                b = Arrays.asList(bibite);
                Gson gson = new Gson();
                String jsonB = gson.toJson(b);
                executeTransferBibite(jsonB);
        }
       
        private void executeTransferBibite(String bibite){
               
        }
       
        private void executeTransferProdotti(String prodotti){
               
        }
       
        public void addProdotto(ProdottoFinito p){
                this.prodotti.add(p);
        }
       
        public void addBibita(Bibita b){
                this.bibite.add(b);
        }
       
        public List<Bibita> getBibite(){
                return bibite;
        }
       
        public List<ProdottoFinito> getProdotti(){
                return prodotti;
        }
       
        public String toString(){
                String s = new String();
                s = "id Tavolo: ";
                s.concat(String.valueOf(idTavolo) + " " + data.toString());
                return s;
        }
       
}


La classe ProdottoFinito è così definita:


Codice (Java): [Seleziona]
public class ProdottoFinito implements Serializable{
        private static final long serialVersionUID = 1L;
       
        private int idProd;
    private String nome;
    private float prezzo;
    private String descrizione;
    private String categoria;
    private List <Ingrediente> ingredienti = new ArrayList<Ingrediente>();
   
    public ProdottoFinito(){
    }
   
    public ProdottoFinito(int idProd,String nome, float prezzo, String descrizione, String categoria)
    {
        this.idProd=idProd;
        this.nome=nome;
        this.prezzo=prezzo;
        this.descrizione=descrizione;
        this.categoria=categoria;
    }
   
    public ProdottoFinito(String nome, float prezzo, String descrizione, String categoria)
    {
        this.nome=nome;
        this.prezzo=prezzo;
        this.descrizione=descrizione;
        this.categoria=categoria;
    }
   
    public ProdottoFinito(String nome, float prezzo, String descrizione, String categoria ,List<Ingrediente> ingr)
    {
        //this.idProd=idProd;
        this.nome=nome;
        this.prezzo=prezzo;
        this.descrizione=descrizione;
        this.categoria=categoria;
        this.ingredienti.addAll(ingr);
    }
   
    //SETTER
   
    public void setId(int id)
    {
        idProd = id;
    }
   
    public void setNome(String name)
    {
        nome = name;
    }
   
    public void setPrezzo(float price)
    {
        prezzo = price;
    }
   
    public void setDescrizione(String descr)
    {
        descrizione = descr;
    }
   
    public void setCategoria (String cat)
    {
        categoria = cat;
    }
   
    public void setIngredienti(ArrayList ingr)
    {
        ingredienti.addAll(ingr);
    }

    //GETTER
   
    public int getId()
    {
        return idProd;
    }
   
    public String getNome()
    {
        return nome;
    }
   
    public float getPrezzo()
    {
        return prezzo;
    }
   
    public String getDescrizione()
    {
        return descrizione;
    }
   
    public String getCategoria()
    {
        return categoria;
    }
   
    public void getIngredienti(List <Ingrediente> ingr)
    {
        ingr.clear();
        ingr.addAll(ingredienti);
       
    }
   
    public int getNumIngred()
    {
        return ingredienti.size();
    }
   
    public String getNomeIngrediente(int index)
    {
        Ingrediente ingred;
        ingred = ingredienti.get(index);
        return ingred.getNome();  
    }
   
   
}

Nell'activity che deve passare il SaveOrderData ho:
Codice (Java): [Seleziona]
Intent in = new Intent(getApplicationContext(), AllProductsActivity.class);
                // Transfering saveOrder parameter
                in.putExtra("mySaveOrder", saveOrder);
                btnViewProducts.setEnabled(false);
                startActivity(in);


Mentre nell'activity che legge l'oggetto ho:
Codice (Java): [Seleziona]
 Intent in = getIntent();
        //saveOrder data
        SaveOrderData saveOrder = (SaveOrderData)in.getExtras().getSerializable("mySaveOrder");



Avvio l'app, ma quando deve passare l'oggetto, cioè all'avvio della seconda activity, ricevo questo errore:
11-10 11:11:14.330: E/AndroidRuntime(3157): FATAL EXCEPTION: main
11-10 11:11:14.330: E/AndroidRuntime(3157): java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = it.paradiso_giuseppe.cooking.SaveOrderData)


Can you help me, please? O:-)


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:Passaggio di oggetti tra activity
« Risposta #1 il: 10 Novembre 2013, 11:57:06 CET »
0
La causa potrebbero essere ProgressDialog e JSONParser che non sono serializzabili. Toglili dalla classe dei dati dell'ordine (non ha nemmeno senso che ci stiano) e riprova.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Peppin2o

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Windows 8.1 Pro x64
Re:Passaggio di oggetti tra activity
« Risposta #2 il: 10 Novembre 2013, 12:35:32 CET »
0
Si, sembra che fosse proprio il parser. Ora funziona ;-)

A questo punto dovrò creare un'altra classe che faccia abbia i metodi per la scrittura sul database (quelli che utilizzavano il parser).

Grazie mille per l'aiuto :)

Offline Peppin2o

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Windows 8.1 Pro x64
Re:Passaggio di oggetti tra activity
« Risposta #3 il: 12 Novembre 2013, 16:52:48 CET »
0
Salve, evito di aprire un'altra discussione perchè è pressocchè lo stesso problema, ma al contrario.
Ciò che deve avvenire è:

1)activity1 passa dati ad activity2
2)activity2 modifica i dati che le sono stati passati da activity1
3)pulsante "conferma modifiche" in activity2
4)modifiche notabili in activity1 (che NON deve essere ricreata, ma solo rimessa in primo piano)


come posso fare a ripassare i dati modificati dall'activity2 di nuovo all'activity1? :)

grazie in anticipo :)
« Ultima modifica: 12 Novembre 2013, 17:38:22 CET da Peppin2o »