0

试图在 android 上解析像http://www.ts.kg/serials/这样的 html 页面。试图用 htmlcleaner 来做,但没有用。试图用jsoup做到这一点。一开始是我的代码复杂。这是最短的代码。同样的事情适用于java请帮助。我的日志http://smartpics.kz/imgs/1361209668WW5O.JPG 这是我的课:

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;
}

}

2013 年 2 月 20 日发布:

尝试按照 Shoshy 的建议进行操作(感谢您的回答),但没有奏效(可能是因为我的手不是来自正确的地方)。这是我修改后的代码: public class MainActivity extends Activity {

@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));

       }
}

}

4

1 回答 1

1

you have to make the request for getting the page in another thread from UI thread. you can use AsyncTask. i am giving some example by editing your code : the link about AsyncTask is : 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) {

        }

}
于 2013-02-19T00:06:48.187 回答