从Android网站解析

时间:2014-01-09 11:55:33

标签: java android parsing jsoup

我正在尝试解析此网站:http://sbaftv.superdriver.it/ro/asp/ricercaorari.asp?user=FTV1&CodProfilo=1&VisInternet=1&visnota=0特别是Comune di PartenzaComune 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);
        }

    }

}

应用程序显示空活动。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

那是因为你没有正确解析数据。它返回零元素。我修改了你解析代码。以下代码提取了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 :(得分:0)

您的选择器正在尝试使用'comunePartINI'类属性检索'div'节点。我认为你真的需要检索“select”节点中包含的'option'节点,其中包含'comunePartINI'id属性:

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

问候。