Autore Topic: JSON e arrayadpter  (Letto 782 volte)

Offline studionovesei

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
JSON e arrayadpter
« il: 08 Luglio 2011, 11:47:31 CEST »
0
Ciao, allora questo è il file JSON che creo tramite php
Codice (Text): [Seleziona]
[
    {
        "id": "2",
        "titolo": "Pluto"
    },
    {
        "id": "1",
        "titolo": "pippo"
    },
    {
        "id": "3",
        "titolo": "minni"
    }
]

E fin qui tutto ok, lo riesco a leggere e suddividere nei 3 "elementi".

Il problema è quando devo creare il mio Custom Array Adapter, mi si creano si i 3 Item ma non riesco a leggere i singoli valori cioè non riesco a scrivere nei vari item il titolo e assegnare al clic il suo ID per caricare il dettaglio.
Se quando inserisco il titolo nella textview mi inserisce  {"id": "3","titolo": "minni" } tutta questa stringa. come recupero solo il titolo? e assegnare l'ID all'item per poi lanciare l'activity seguente?

Questo il l'array adpter
Codice (Java): [Seleziona]
public class MyCustomAdapter extends ArrayAdapter<String> {
                private int[] colors = new int[] { 0x00ffffff, 0x11111111 };

                //      private ArrayList<String> items;
                public Context c;
                public String[] targets;

                public MyCustomAdapter(Context context, int textViewResourceId,
                                String[] objects) {
                        super(context, textViewResourceId, objects);
                        this.c = context;
                        this.targets = objects;
                }

                @Override
                public View getView(int position, View convertView, ViewGroup parent) {
                        Intent intent=getIntent();
                        String pkg=getPackageName();
                        final int _id=intent.getIntExtra(pkg+".myID", 1);
                        LayoutInflater inflater=getLayoutInflater();
                        View row=inflater.inflate(R.layout.subcat_row, parent, false);
                        TextView label=(TextView)row.findViewById(R.id.row_text);
                        String o = targets[position];
                        label.setText(""+o);

                        /*ImageView icona = (ImageView)row.findViewById(R.id.catIcon);
                        icona.setImageDrawable(getResources().getDrawable(arrayIcone[position]));*/


                        int colorPos = position % colors.length;
                        row.setBackgroundColor(colors[colorPos]);
                        return row;
                }

        };

questo è il parsing JSON
Codice (Java): [Seleziona]
                        JSONArray jArray = new JSONArray(result);
                        List<String> catList = new ArrayList<String>();
                        for(int i=0;i<jArray.length();i++){
                                JSONObject json_data = jArray.getJSONObject(i);
                                catList.add( jArray.getString(i) );            

                        }
                        String[] cat_List = catList.toArray(new String[catList.size()]);
                        ArrayAdapter<String> arrayadapter = new MyCustomAdapter(this,R.layout.subcat_row,cat_List);
                        setListAdapter(arrayadapter);

sta cosa mi sta facendo impazzire!!!!
« Ultima modifica: 08 Luglio 2011, 12:02:35 CEST da studionovesei »

Offline studionovesei

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
Re:JSON e arrayadpter
« Risposta #1 il: 08 Luglio 2011, 20:16:16 CEST »
0
Forse ho posto male la domanda...e forse quella che inserito non è la strada giusta.

Quale è la strada per passare un array multidimensionale ad un arrayadapter?
Io pensavo con un Arraylist con dentro un altro arraylist....però poi non so come scoporlo dentro all'array adapter...
Mi sembrava tanto banale come cosa....perchè con un dabase SQLITE c'ero riuscito...ma importando i valori con JSON non riesco a cavarci un ragno dal buco!


Offline mrfalco

  • Utente junior
  • **
  • Post: 81
  • Respect: +2
    • Mostra profilo
    • www.falcodomingo.it
  • Dispositivo Android:
    Samsung Galazy S
  • Sistema operativo:
    Windows Vista
Re:JSON e arrayadpter
« Risposta #2 il: 08 Luglio 2011, 20:52:02 CEST »
0
Ciao secondo me potresti fare in questo modo:

cicla l'array json che ti arriva:

Codice (Java): [Seleziona]
                 //questa variabile la darai in pasto al simple adapter
                  ArrayList<HashMap<String, String>> lista = new ArrayList<HashMap<String, String>>();  
                 
                  String[] nome={"Name","Cognome"};
                  int[] reso={R.id.Name,R.id.Nomec};
                  for(int i=0;i<jArray.length();i++){
                                // dichiari un hashmap che ti serve per leggere chiave valore dell'array json
                                HashMap<String,String> data = new HashMap<String,String> ();
                         JSONObject json_data = jArray.getJSONObject(i);
                         data.put("nome", json_data.getString("nome") ) ;
                         data.put("cognome",json_data.getString("descrizione")) ;
                 lista.add(data);
                }
  SimpleAdapter sp=new SimpleAdapter(this, lista,R.layout.tuolayout , nome, reso);

  TualistView.setadapter(sp);

spero sia stato di aiuto

Offline studionovesei

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
Re:JSON e arrayadpter
« Risposta #3 il: 08 Luglio 2011, 21:11:50 CEST »
0
Funzionaaaaaaaaaaa!!!!!! Ti voglio bene! amichevolmente parlando!!!

Ok ora se io al posto del cognome ho un ID che poi devo passare ad un'activity sucessiva per recuperare il dettaglio..come gli assegno che valore all'item creato quando lo vado a schiacciare?

Perchè mi sembra che così posso solo scrivere il valore dentro ad una Textview o sbaglio?

lv.setOnItemClickListener(new OnItemClickListener() { }


Offline mrfalco

  • Utente junior
  • **
  • Post: 81
  • Respect: +2
    • Mostra profilo
    • www.falcodomingo.it
  • Dispositivo Android:
    Samsung Galazy S
  • Sistema operativo:
    Windows Vista
Re:JSON e arrayadpter
« Risposta #4 il: 08 Luglio 2011, 21:25:17 CEST »
0
per passare valori da un'activity e l'altra devi usare il putextra cosi:
Codice (Java): [Seleziona]
            Intent i = new Intent(this,Second.class);
           String pkg1=getPackageName();
            i.putExtra(pkg1+".myString", var1);
            i.putExtra(pkg1+".myString1", var2);
            i.putExtra(pkg1+".myString2", var3);
            startActivity(i);

 e poi nell'on create della activity che apri devi riprenderli cosi:

Codice (Java): [Seleziona]
                                    Intent intent=getIntent(); // l'intent di questa activity
                        String pkg=getPackageName();
                        var1=intent.getStringExtra(pkg+".myString");                                          var2=intent.getStringExtra(pkg+".myString1");  // idrep
                        var3=intent.getStringExtra(pkg+".myString2");

ciao

Offline studionovesei

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
Re:JSON e arrayadpter
« Risposta #5 il: 08 Luglio 2011, 21:33:55 CEST »
0
Quello lo sapevo fare con il cursorAdapter e mi prendeva in automatico l'ID relativo al ID del dabase sqlite
Codice (Java): [Seleziona]
lista_log.setOnItemClickListener(new OnItemClickListener() {
                        public void onItemClick(AdapterView<?> parent, View view,
                                        int position, long id) {
                                long _id=adapter.getItemId(position);  
                                Intent intent_showlog = new Intent(getApplicationContext(),show_log.class);
                                String pkg=getPackageName();
                                intent_showlog.putExtra(pkg+".myID", _id);
                                startActivity(intent_showlog);
                        }
                });

Nel mio caso che ora i dati li passo da MYSQL se passo TITOLO e ID (relativo al DB mysql ) come gli dico di passarmi quell'ID?
ho provato ma mi passa sempre l'id relativo alla posizione dell'item.

Offline mrfalco

  • Utente junior
  • **
  • Post: 81
  • Respect: +2
    • Mostra profilo
    • www.falcodomingo.it
  • Dispositivo Android:
    Samsung Galazy S
  • Sistema operativo:
    Windows Vista
Re:JSON e arrayadpter
« Risposta #6 il: 09 Luglio 2011, 08:02:40 CEST »
0
prova cosi ma cerca di non dire piu' questo lo sapevo fare anche io ,cerca di spiegare meglio il problema ciao

Codice (Java): [Seleziona]
                      public void onItemClick(AdapterView<?> arg0, View arg1,int arg2, long arg3) {              
                                                        @SuppressWarnings("unchecked")
                      HashMap<String, Object> p=(HashMap<String,Object>) mView.getItemAtPosition(arg2);
                             Collection<Object> co=p.values();
                      Object[] l=  co.toArray();
                      rigasel="" + l[0];//descrizione
                      id=l[1];//id                                     
                                        }
                    }

ti basta vedere nel debug come è strutturato  Object[] l


ciao

Offline studionovesei

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
Re:JSON e arrayadpter
« Risposta #7 il: 09 Luglio 2011, 08:26:05 CEST »
0
scusami, forse mi ero espresso male, nel senso che quel sistema che mi avevi mostrato lo avevo usato in un procedimento simile ma con il CursorAdpter e funzionava ma con il simpleAdapter non riuscivo a ricavare l'ID.

Ora provo subito...grazie mille per la disponibilità!

Offline studionovesei

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
Re:JSON e arrayadpter
« Risposta #8 il: 09 Luglio 2011, 08:45:40 CEST »
0
Sono commosso! erano 2 giorni che non ci cavavo un ragno da un buco!!! e ora funziona tutto!
Ho cercato tutorial su tutorial, libri, ma nulla...non riuscivo a trovare un esempio analogo (che mi sembrava una cosa banale) e poi come dicevo ho fatto una cosa praticamente identica on SQLite e il curosr adpter e non ho avuto nessun problema.

quello che mi ha colpito e che ancora non avevo mai visto fare è questo:

HashMap<String, Object> p=(HashMap<String,Object>) mView.getItemAtPosition(arg2);
Collection<Object> co=p.values();

adesso cerco di approfondire gli argomenti HashMap e Collection

Grazie Mille ancora!

Offline mrfalco

  • Utente junior
  • **
  • Post: 81
  • Respect: +2
    • Mostra profilo
    • www.falcodomingo.it
  • Dispositivo Android:
    Samsung Galazy S
  • Sistema operativo:
    Windows Vista
Re:JSON e arrayadpter
« Risposta #9 il: 09 Luglio 2011, 16:04:14 CEST »
0
Se hai risolto il topic clicca su risolto cosi lo chiudi ciao