Я пытаюсь разобрать этот веб-сайт: http: //sbaftv.superdriver.it/ro/asp/ricercaorari.asp?user=FTV1&CodProfilo=1&VisInternet=1&visnota=0, в частности, параметры в Comune di Partenza и Comune di Arrivo, но я могу » не делай этого. Это код:

public class MainActivity extends Activity {

    ListView lista;
    static final String BLOG_URL = "http://sbaftv.superdriver.it/ro/asp/ricercaorari.asp?user=FTV1&CodProfilo=1&VisInternet=1&visnota=0";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lista = (ListView)this.findViewById(R.id.main_lista);//recupero lista da id

        //creo ed eseguo l'asynctask
        ParsingPaginaWeb parsing = new ParsingPaginaWeb();
        parsing.execute("");
    }

    private class ParsingPaginaWeb extends AsyncTask<String,String,String> {

        ArrayList<String> titoli; //lista dei titoli
        //ArrayList<String> descrizioni; //lista delle descrizioni

        @Override
        protected void onPreExecute()
        {
            //prima di eseguire il parsing inizializzo gli arraylist
            titoli = new ArrayList<String>();
            //descrizioni = new ArrayList<String>();
        }

        @Override
        protected String doInBackground(String... params) {
            try {

                Document doc = Jsoup.connect(BLOG_URL).get(); //E' il sito dove faccio il parsing   
                // prelevo l'h3 cioè il titolo di ogni sezione e poi ciclo tutto
                Elements nodeBlogStats = doc.select("div.comunePartINI");
                for(Element sezione : nodeBlogStats)//per ogni sezione tra gli elementi ricavati prima
                {

                        titoli.add(sezione.text());
                        //descrizioni.add(descrizione);

                }
            } catch (Exception e) {
                // In caso di errore
                Log.e("ESEMPIO", "ERRORE NEL PARSING");
            }
            return null;
        }

        @Override
        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(MainActivity.this, titoli);
            lista.setAdapter(adapter);
        }

    }

}

Приложение отображает пустую активность. Любые идеи?

1
David_D 9 Янв 2014 в 15:55

2 ответа

Лучший ответ

Это потому, что вы неправильно анализируете данные. Он возвращает нулевые элементы. Я изменил ваш код синтаксического анализа. Следующий код извлекает все параметры Comune di Partenza.

Используйте следующий код в своем блоке try

doc = Jsoup.connect(BLOG_URL).get();
Elements nodeBlogStats = doc.select("#comunePartINI > option");
for(Element sezione : nodeBlogStats)
{
    titoli.add(sezione.text());
}

Также рекомендуется возвращать результат из asynctask и использовать его в onPostExecute, а не определять поле класса и затем изменять его.

1
Anurag 9 Янв 2014 в 13:13

Ваш селектор пытается получить узел 'div' с атрибутом класса 'comunePartINI'. Я думаю, вам действительно нужно получить узлы 'option', содержащиеся в узле 'select' с атрибутом id 'comunePartINI':

Elements nodeBlogStats = doc.select("select#comunePartINI > option");
for(Element sezione : nodeBlogStats)//per ogni sezione tra gli elementi ricavati prima
{
    titoli.add(sezione.text());
}

С уважением.

0
eltabo 9 Янв 2014 в 13:12