2013-02-18 122 views
0

尝试在android上解析html页面http://www.ts.kg/serials/。试图用htmlcleaner来做,但它没有工作。试图用jsoup来做。在开始是我的代码复杂。这是最短的代码。同样的事情对java有用请帮忙。我的日志http://smartpics.kz/imgs/1361209668WW5O.JPG 这里是我的类:android html解析jsoup

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    String[] names= {}; 
    String url = "http://www.ts.kg/mults/"; 

    try { 
     Document doc = Jsoup.connect(url).get(); 
     Element e = doc.body(); 
     Elements ggg = e.getElementsByAttributeValue("class", "categoryblocks"); 
     for (int i =0;i<ggg.size();i++) { 
      Element linkk = ggg.get(i); 
      if(linkk.getElementsByTag("a")!=null){ 
       Element atom = linkk.getElementsByTag("a").first(); 
       String n = atom.getElementsByTag("span").first().text(); 
       names[i] = n; 
      } 

     } 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    ListView lvMain = (ListView) findViewById(R.id.listViewData); 

    // создаем адаптер 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
     android.R.layout.simple_list_item_1, names); 

    // присваиваем адаптер списку 
    lvMain.setAdapter(adapter); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

} 

发布20.feb.2013:

tryed做到这一点,因为它是提出Shoshy(感谢您的答案),但没有奏效(也许是因为我从不正确的地方成长的手)。这是我修改后的代码: 公共类MainActivity扩展活动{

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    url = "http://www.ts.kg/mults/"; 
    pd = ProgressDialog.show(MainActivity.this, "Working...", "request to server", true, false); 
    //Запускаем парсинг 
    new AsyncExecution().execute(); 
} 
private ProgressDialog pd; 
String url;; 
String names[]; 

private class AsyncExecution extends AsyncTask<Void, Void, Void>{ 

    @Override 
    protected Void doInBackground(Void... params) { 
      // here your task will be done in seperate thread from UI thread 
      // and if you want to use the variables (that will be modifed here) 
      // from anywhere in MainActivity, then you should declare them as global 
      // variable in MainActivity. remember you cannot update UI from here , like 
      // Toast message. if you want to do that you can use OnPostExecute 
      // method bellow . 
       try { 
        ArrayList<String> array = new ArrayList<String>(); 
        Document doc = Jsoup.connect(url).get(); 
        Element e = doc.body(); 
        Elements ggg = e.getElementsByAttributeValue("class", "categoryblocks"); 
        for (int i =0;i<ggg.size();i++) { 
         Element linkk = ggg.get(i); 
         if(linkk.getElementsByTag("a")!=null){ 
          Element atom = linkk.getElementsByTag("a").first(); 
          String n = atom.getElementsByTag("span").first().text(); 
          array.add(n); 
         } 

        } 
        for (int i = 0;i<array.size();i++){ 
         names[i]=array.get(i); 
        } 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) {   
     //Убираем диалог загрузки 
     pd.dismiss(); 
     //Находим ListView 
     ListView listview = (ListView) findViewById(R.id.listViewData); 
     //Загружаем в него результат работы doInBackground 
     listview.setAdapter(new ArrayAdapter<String>(MainActivity.this, 
      android.R.layout.simple_list_item_1, names)); 

     } 
} 

}

+0

什么错误。请发布logcat @ user2084210 – Shoshi 2013-02-20 09:55:00

+0

http://smartpics.kz/imgs/1361354841VQRZ.JPG – Rinomancer 2013-02-20 10:07:50

+0

图片上的黑色线条 - Log.e(“SSSSSSSS”,names); – Rinomancer 2013-02-20 10:09:13

回答

1

你必须做出的请求从UI线程另一个线程获取页面。您可以使用AsyncTask。我给一些例如通过编辑代码: 链接约AsyncTask是:about AsynckTask

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    //the class is defined bellow 
    new AsyncExecution().execute(); 

    //other codes..... 
    ....................... 
} 
/// your other codes ..... 


    // you need to add this class 
    private class AsyncExecution extends AsyncTask<Void, Void, Void>{ 

    @Override 
    protected Void doInBackground(Void... params) { 
      // here your task will be done in seperate thread from UI thread 
      // and if you want to use the variables (that will be modifed here) 
      // from anywhere in MainActivity, then you should declare them as global 
      // variable in MainActivity. remember you cannot update UI from here , like 
      // Toast message. if you want to do that you can use OnPostExecute 
      // method bellow . 
       try { 
        Document doc = Jsoup.connect(url).get(); 
        Element e = doc.body(); 
        Elements ggg = e.getElementsByAttributeValue("class", "categoryblocks"); 
        for (int i =0;i<ggg.size();i++) { 
         Element linkk = ggg.get(i); 
         if(linkk.getElementsByTag("a")!=null){ 
          Element atom = linkk.getElementsByTag("a").first(); 
          String n = atom.getElementsByTag("span").first().text(); 
          names[i] = n; 
         } 

        } 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
    } 

    @Override 
    protected void onPostExecute(Void result) { 

     } 

} 
+0

不幸的是我没有做对,你能看看我的上一篇文章。我用我的第2次尝试修改了它 – Rinomancer 2013-02-20 09:58:02