Autore Topic: Da json ad ArrayAdapter  (Letto 569 volte)

Offline Dav_android

  • Utente junior
  • **
  • Post: 78
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Tab2 10.1
  • Sistema operativo:
    Windows 8
Da json ad ArrayAdapter
« il: 26 Settembre 2014, 11:24:53 CEST »
0
Ciao Ragazzi ho un problema, in pratica faccio una richiesta http in un task asincrono e ottengo una stringa json, fin qui tutto ok.

Nella stringa json c'è una lista di news che vorrei far visualizzare in una listview che poi ovviamente sarà cliccabile per accedere alla singola news.

Quello che non riesco a fare e inserire il tutto in un arrayAdapter per poterlo associare alla listview, vi posto il codice così potete darmi dei sugerimenti.

l'errore me lo da nella riga ArrayAdapter<String>...... ecc ecc

Codice (Java): [Seleziona]
protected void onPostExecute(String result) {
            super.onPostExecute(result);
            progress.dismiss();
               
                String json = result;  
                JSONArray jsonArray;
                        try {
                                jsonArray = new JSONArray(json);
                                String[] arrayNews = new String[jsonArray.length()];
                               
                               
                               
                               
                                ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,R.layout.row_news,R.id.titoloNews,arrayNews);
                                ListView lv = (ListView) findViewById(R.id.listView);
                                lv.setAdapter(arrayAdapter);
                               
                               
                        for(int i=0;i < jsonArray.length();i++) {
                            String id_news = jsonArray.getJSONObject(i).getString("id_news");
                            String titolo_news_it = jsonArray.getJSONObject(i).getString("titolo_news_it");
                            arrayNews[i] = id_news+" - "+titolo_news_it;
                           
                            Toast.makeText(NewsActivity.this, arrayNews[i], Toast.LENGTH_SHORT).show();
                        }
                        } catch (JSONException e) {
                                e.printStackTrace();
                        }
        }

Post unito: 26 Settembre 2014, 11:58:24 CEST
Ragazzi ci sono riuscito, in pratica nell'array adaptere non specificavo bene il context, inserivo solo this, invece rea NewsActivity.this perechè mi trovavo nella inner class .

adesso passo la stringa "arrayNews = id_news+" - "+titolo_news_it+" - "+data_news;" al layout della singola riga, come dovrei fare se volessi passare singolarmente ogni olemento json per visualizzarli in più textview ovviamente adeguatamente impostate nel layout?

penso dovrei agire su questa riga
Codice (Java): [Seleziona]
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(NewsActivity.this,R.layout.row_news,R.id.titoloNews,arrayNews);
il codice ora è il seguente:

Codice (Java): [Seleziona]
protected void onPostExecute(String result) {
            super.onPostExecute(result);
            progress.dismiss();
               
                String json = result;  
                JSONArray jsonArray;
                        try {
                                jsonArray = new JSONArray(json);
                                String[] arrayNews = new String[jsonArray.length()];
                               
                                for(int i = 0; i < jsonArray.length(); i++) {
                            String id_news = jsonArray.getJSONObject(i).getString("id_news");
                            String titolo_news_it = jsonArray.getJSONObject(i).getString("titolo_news_it");
                            String data_news = jsonArray.getJSONObject(i).getString("data_news");
                            arrayNews[i] = id_news+" - "+titolo_news_it+" - "+data_news;
                           
                        }
                               
                               
                                ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(NewsActivity.this,R.layout.row_news,R.id.titoloNews,arrayNews);
                                ListView lv = (ListView) findViewById(R.id.listView);
                                lv.setAdapter(arrayAdapter);
               
                        } catch (JSONException e) {
                                e.printStackTrace();
                        }
        }
« Ultima modifica: 26 Settembre 2014, 11:58:24 CEST da Dav_android, Reason: Merged DoublePost »

Offline emaborsa

  • Utente normale
  • ***
  • Post: 274
  • Java Developer
  • Respect: +33
    • Google+
    • emaborsa
    • Mostra profilo
    • www.emaborsa.com
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Linux 10 - Win8.1 - Android 4.1.2
Re:Da json ad ArrayAdapter
« Risposta #1 il: 28 Settembre 2014, 12:07:51 CEST »
0
Ciao,io uso spesso Json, peró per facilitare lagestione dei dati, ho imolementato una struttura classi del contenuto del Json e tramite la libreria Gson creo gli oggetti:

Codice (Java): [Seleziona]
Gson g = new Gson();
T data = (T) g.fromJson(jsonstring, baseclass);

Cosí facendo puoi gestirtimeglio il tutto.


Per fare quello che vuoi tu (sempre se ho capito bene), potresti estendere l'adapter, nel costruttore gli passi i tuoi JSon e facendo l'override del metodo getView() puoi specificare/definire il singolo elemento della lista.

Per ulteriori info cerca suinternet, é pieno di esempi...
Spero di esserti stato utile.

Offline Dav_android

  • Utente junior
  • **
  • Post: 78
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Tab2 10.1
  • Sistema operativo:
    Windows 8
Re:Da json ad ArrayAdapter
« Risposta #2 il: 28 Settembre 2014, 13:27:20 CEST »
0
Alla fine ho creato io una classe oggetto personalizzata, quando ottengo il json chiamo il costruttore passandogli i dati ricevuti in un for, così da ottenere i miei oggetti dalla sringa json. Poi ho creato una classe che estende l'adapter come mi hai detto tu, e manipolando il metodo getView ottengo il risultato che voglio nella lista.
Grazie per la risposta, a proposito ma è possibile togliere graficamente il border che l'adapter inserisce automaticamente tra ogni elemento della lista?

Offline emaborsa

  • Utente normale
  • ***
  • Post: 274
  • Java Developer
  • Respect: +33
    • Google+
    • emaborsa
    • Mostra profilo
    • www.emaborsa.com
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Linux 10 - Win8.1 - Android 4.1.2
Re:Da json ad ArrayAdapter
« Risposta #3 il: 28 Settembre 2014, 13:34:20 CEST »
0
Se devo essere sincero non ci ho ma pensato, peró credo sia tutto possibile....ma non dirti la complessitá. Personalmente definisco sempre il layout dell'activity che contiene la lista e anche la singola riga, ma lo spazio tra una riga e l'altra, l'ho sempre voluto tenere.

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:Da json ad ArrayAdapter
« Risposta #4 il: 28 Settembre 2014, 14:00:02 CEST »
0
Se per bordo intendi il divisore tra gli item, è un attributo della lista di nome divider e altezza dividerHeight.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Dav_android

  • Utente junior
  • **
  • Post: 78
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Tab2 10.1
  • Sistema operativo:
    Windows 8
Re:Da json ad ArrayAdapter
« Risposta #5 il: 29 Settembre 2014, 10:05:57 CEST »
0
Ok perfetto, quindi è un attributo che di default mostra la linea divisoria tranquillamente modificabile da xml. Grazie 1000!