Listview e parsing

di Anonimizzato10182 il
29 risposte
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

  • E' possibile che sbaglio nel metodo onPostExecute perché non passo la string result?
  • Hai controllato che la lista "titoli" venga correttamente popolata?
  • 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>
  • Comunque ho controllato anche la lista titoli ed è correttamente popolata.
  • 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!
  • 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
  • Boh prova a postarlo, magari c'è un piccolo dettaglio da cambiare
  • 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
        }
        
    
    
    }
    
  • Si, in effetti l'adapter mi sembra ok, così come il codice dell'activity! Sei riuscito a risolvere o il problema persiste?
  • 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
  • Beh in teoria si, ma come ti dicevo prima non è quello il problema, perché non utilizzi i parametri (infatti nel "doInBackground" restituisci null).
  • Infatti , per questo non volevo dirtelo però sinceramente non mi è proprio chiaro dove sbaglio
  • Il logcat non ti da nessun errore?
Devi accedere o registrarti per scrivere nel forum
29 risposte