Autore Topic: Creare una lista da file online con AsyncTask  (Letto 517 volte)

Offline ClearCode

  • Nuovo arrivato
  • *
  • Post: 1
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Ace Plus S7500
  • Sistema operativo:
    Windows 8.1
Creare una lista da file online con AsyncTask
« il: 06 Gennaio 2015, 13:24:53 CET »
0
Ciao a tutti da circa 2 giorni ho un problema che non riesco a risolvere, premetto che sono nuovo del mondo java/android. Ho realizzato una applicazione molto banale che prende un txt contenuto nel mio dominio internet e pone ogni riga del file come elemento dell'array e successivamente ogni elemento dell'array corrisponderà ad un elemento della lista. Tutto bene fino a quando non sono venuto a conoscenza che per alcuni dispositivi devo obbligatoriamente utilizzare AsyncTask per poter effettuare le operazioni internet (che sarà solamente la lettura e il salvataggio delle righe del file nell'array). Quindi il punto è che devo invocare la classe Async da un altra classe, effettuare le operazioni e far ritornare l'intero array di stringhe alla classe primaria; pensavo di aver risolto ma il problema è che il codice sembra non funzionare, o meglio il metodo onPostExecute non viene mai eseguito.

Codice: [Seleziona]
public class AsyncRead extends AsyncTask<Object, String[], String[]>{
    static String url = "http://MIO_SITO_INTERNET/";
    static String ConfPath = new String();

        protected String[] doInBackground(Object... params){
            String[] menus = new String [(int) params[1]];
            try{

                BufferedReader reader = new BufferedReader(new InputStreamReader(new URL(url+params[0]).openStream()));
                String line = reader.readLine();
                for (int k = 0; k < (int)params[1]; k++) {
                    menus[k] = line;
                    line = reader.readLine();
                }
                Log.i("primo","");
                return menus;
            }
            catch (IOException e){
                e.printStackTrace();
            }
            Log.i("secondo","");
            return menus;
        }

    @Override
    protected void onPostExecute(final String[] menu) {
        Log.i("Entrato","");
        new ListActivity(){
            @Override
            public void setListAdapter(ListAdapter adapter) {
                Log.i("Stringa", menu[0] );
                setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, menu));
            }
        };
    }
}
param[0] è il nome del file che verrà unito al dominio
param[1] è la dimensione dell'array passata al momento della chiamata.
Aggiungo inoltre che ho pensato di far creare direttamente la lista all'interno del metodo onPostExecute per il semplice fatto che non potevo porre il mio array di stringhe nella classe primaria uguale alla classe AsyncTask per far ritornare l'array di stringhe (cosa che avevo fatto precedentemente alla scoperta di questa classe) per il semplice fatto che non verrebbe ritornato un array di stringhe ma l'intero oggetto.
« Ultima modifica: 06 Gennaio 2015, 13:27:03 CET da ClearCode »

Offline Semola

  • Utente junior
  • **
  • Post: 55
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei Nexus 6P
  • Sistema operativo:
    Ubuntu 13.04 on Dell XPS 14
Re:Creare una lista da file online con AsyncTask
« Risposta #1 il: 26 Gennaio 2015, 15:57:32 CET »
0
ciao
non mi esprimo sulla scelta di un file per questo genere di operazioni, molto meglio un db, o almeno un file di tipo json o xml che è più facile da trattare, ma tutto dipende anche dalla quantità di informazioni che a te serve recuperare, quindi puoi lasciare anche così
perché utilizzi gli array che sono, a mio parere, un pò scomodi? potresti utilizzare un arraylist che si gestisce più facilmente.

non sono critiche inutili, sono consigli, magari apprendi qualcosa di nuovo.