Listview e parsing

di il
29 risposte

Listview e parsing

Salve ragazzi, siccome è la prima volta che uso l'adapter, volevo chiedervi una mano.
Praticamente ho un'activity (Seconda.java) nella quale creo una lista nella quale andranno ad essere visualizzate delle stringhe che prelevo correttamente tramite parsing . Il problema è che avvio l'app, non mi da nessun errore, ma non vi visualizza le stringhe .Vi posto il codice dell'attività e i due layout che ho creato per la relativa activity.


Seconda.java
public class Seconda extends Activity {

	ListView date1;
	String url="http:......";
	ProgressDialog mProgressDialog;

	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_seconda);
        
        // recupero lista da id
        date1 = (ListView)findViewById(R.id.date1);
        
        
     // eseguo Titolo AsyncTask
     new Titolo().execute();
        
      
            
        
    }
    
    // Eseguo Titolo Asyntask
    private class Titolo extends AsyncTask<Void, Void, String>
    {
    	
    	// lista delle date pomeridiane
    	ArrayList<String> titoli;

    	Document doc;
    	protected void onPreExecute()
    	{
    		super.onPreExecute();
    		
    		//prima di eseguire il parsing inizializzo gli arraylist
            titoli = new ArrayList<String>();

    		mProgressDialog = new ProgressDialog(Seconda.this);
    		mProgressDialog.setTitle("Recovery Data");
    		mProgressDialog.setMessage("Loading");
    		mProgressDialog.setIndeterminate(false);
    		mProgressDialog.show();
    	}
    	
		@Override
		protected String doInBackground(Void... arg0) {
			// TODO Auto-generated method stub
			
			try 
			{
				//connettiti al sito
				// sfrutta la codifica ISO-8859-1 in modo tale da poter fare l'encode in maniera corretta.
				doc = Jsoup.parse(new java.net.URL(url).openStream(), "ISO-8859-1", url);
			
				Element tbody = doc.select("table[width=809]").first().child(0);
		         

				   // mi prendo tutti i figli di tbody
				   Elements rows = tbody.children();
				  
				   // cancello le prime 4 righe corrispondenti a <tr>
				   Element riga = rows.get(4);
				  
				   // ogni mese quando si aggiorna il sito, cambiare l'indice del ciclo for
				  for(int i = 2; i <= 8; i++)
				  {
					  String periodo = riga.select("div span strong").get(i).text();
					//Log.d("Valore periodo= ", periodo);	// stampa nel logcat il valore della variabile
					  titoli.add(periodo);
				  }
				   
			}
			catch(Exception e)
			{
				// gestione dell'eccezione
	               // ad esempio mostrare messaggio di errore o altro (qui nel logcat)
					Log.e("MYAPP", "exception: " + e.toString());	// il metodo e.toString()
																	// indica l'errore che ha 
																	// generato l'eccezione
			}
			
			return null;
		}
		
		protected void onPostExecute(String result)
		{
			// dopo che ho eseguito il parsing mostro i dati nella listview
            // usando il custom array adpater ParsingArrayAdapter
            ParsingArrayAdapter adapter = new ParsingArrayAdapter(Seconda.this, titoli);
			
            date1.setAdapter(adapter);
			mProgressDialog.dismiss();
		}
 }
    
    
   
}

activity_seconda.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000" >

    <TextView
        android:id="@+id/textTitolo1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:text="@string/titolo1"
        android:textColor="#009933"
        android:textSize="30dp"
        android:textStyle="bold|italic" 
        android:gravity="center"/>

    <ListView
       android:id="@+id/date1"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_weight="1" >
    </ListView>

</LinearLayout>

activity_riga_litview
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >

    <TextView
       android:id="@+id/riga_listview_titolo"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Medium Text"
       android:textAppearance="?android:attr/textAppearanceMedium" />


</LinearLayout>
Mi dareste una mano a capire quale è il problema?? Grazie mille.

29 Risposte

  • Re: Listview e parsing

    E' possibile che sbaglio nel metodo onPostExecute perché non passo la string result?
  • Re: Listview e parsing

    Hai controllato che la lista "titoli" venga correttamente popolata?
  • Re: Listview e parsing

    Della ha scritto:


    Hai controllato che la lista "titoli" venga correttamente popolata?
    Ho utilizzato la stringa
    Log.d("Valore periodo= ", periodo);
    per vedere se prendevo correttamente i dati ed è ok.
    Ma sono corretti i parametri che ho usato per l'AsyncTask?
    AsyncTask<Void, Void, String>
  • Re: Listview e parsing

    Comunque ho controllato anche la lista titoli ed è correttamente popolata.
  • Re: Listview e parsing

    Boh, se la lista è correttamente popolata allora è presumibile che l'errore sia nell'implementazione dell'adapter..

    MacGigi ha scritto:


    Ma sono corretti i parametri che ho usato per l'AsyncTask?
    AsyncTask<Void, Void, String>
    E' uguale, tanto non li usi i parametri!
  • Re: Listview e parsing

  • Re: Listview e parsing

    Ho dato un'occhiata all'adapter ma mi sembra che non ci sono errori. Ho seguito un tutoria e praticamente l'ho copiato passo passo perché era quasi identico
  • Re: Listview e parsing

    Boh prova a postarlo, magari c'è un piccolo dettaglio da cambiare
  • Re: Listview e parsing

    package com.example.turni.farmacie;
    
    import java.util.ArrayList;
    
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.TextView;
    
    public class ParsingArrayAdapter extends ArrayAdapter<String>{
    	
    	//riferimenti statici alle risorse e agli id
        private final static int LAYOUT = R.layout.activity_riga__listview;
        private final static int TITOLO = R.id.riga_listview_titolo;
        
        ArrayList<String> titoli; //lista dei titoli
        Context c; //context
        LayoutInflater inflater; //layout inflater
        
        public ParsingArrayAdapter(Context context,ArrayList<String> titoli)
        {
                super(context,TITOLO);
                this.c = context;
                this.titoli = titoli;
                this.inflater = LayoutInflater.from(c);
        }
        
        @Override
        public int getCount()
        {
                return titoli.size(); //ritorno lunghezza lista ( = numero dei titoli)
        }
        
        //quando la lista richiede una view
        @Override
        public View getView(int pos,View view,ViewGroup parent)
        {
                CacheRiga cache; //cache
                if(view==null)//se e' la prima volta che viene richiesta la view
                {
                        // creo la view ma non l'attacco alla lista in quanto devo ancora modificare
                        // i testi delle textview
                        view = inflater.inflate(LAYOUT, parent,false); 
                        cache = new CacheRiga(); //inizializzo la cache
                        cache.titolo = (TextView) view.findViewById(TITOLO); //collego titolo
                        view.setTag(cache);//collego view con cache
                }
                else
                {
                        cache = (CacheRiga) view.getTag(); //altrimenti prendo la cache dalla view
                }
                
                cache.titolo.setText(titoli.get(pos)); //imposto il titolo
              
                return view;
        }
        
        private class CacheRiga { // classe per la cache delle righe
                public TextView titolo; // cache titolo
        }
        
    
    
    }
    
  • Re: Listview e parsing

    Si, in effetti l'adapter mi sembra ok, così come il codice dell'activity! Sei riuscito a risolvere o il problema persiste?
  • Re: Listview e parsing

    Ciao Della grazie per l'interessamento, purtroppo niente ... non me li vuole visualizzare.
    Senti ma non è che quando dichiaro l'asynctask nel terzo parametro devo mettere l'arrayList anziché String? Perdonami in anticipo se ho detto una c******a
  • Re: Listview e parsing

    Beh in teoria si, ma come ti dicevo prima non è quello il problema, perché non utilizzi i parametri (infatti nel "doInBackground" restituisci null).
  • Re: Listview e parsing

    Infatti , per questo non volevo dirtelo però sinceramente non mi è proprio chiaro dove sbaglio
  • Re: Listview e parsing

    Il logcat non ti da nessun errore?
Devi accedere o registrarti per scrivere nel forum
29 risposte