【问题标题】:How To Extract Table Data Via Android如何通过 Android 提取表格数据
【发布时间】:2013-09-21 03:34:19
【问题描述】:

我正在尝试从网页上的表格中提取数据。到目前为止,我已经能够从标题标签中提取数据 - 但不是表格数据。如何使用下面显示的源来完成?

来源:

public class MainActivity extends Activity {

TextView tv;
final String URL="http://example.com";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tv = (TextView) findViewById(R.id.TextView01);
new MyTask().execute(URL);
}

private class MyTask extends AsyncTask<String, Void, String> {
ProgressDialog prog;
String title = "";
@Override
protected void onPreExecute() {
      prog = new ProgressDialog(MainActivity.this);
      prog.setMessage("Loading....");
      prog.show();
}
@Override
protected String doInBackground(String... params) {
    try {
        Document doc = Jsoup.connect(params[0]).get();
        title = doc.title();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return title;
}
@Override
protected void onPostExecute(String result) {
    super.onPostExecute(result);
    prog.dismiss();
    tv.setText(result);
}

}
}

编辑 - 回应以下 Matej Spili 的评论:

public class MainActivity extends Activity {

TextView tv;
final String URL="http://example.com";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tv = (TextView) findViewById(R.id.TextView01);
new MyTask().execute(URL);
}

private class MyTask extends AsyncTask<String, Void, String> {
ProgressDialog prog;
String title = "";
@Override
protected void onPreExecute() {
      prog = new ProgressDialog(MainActivity.this);
      prog.setMessage("Loading....");
      prog.show();
}
@Override
protected String doInBackground(String... params) {
    try {
        Document doc = Jsoup.connect(params[0]).get();
        Element tableHeader = doc.select("tr").first();


        for( Element element : tableHeader.children() )
        {
            // Here you can do something with each element
            System.out.println(element.text());
            tv.setText(element.text());
        }

        title = doc.title();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return title;
}
@Override
protected void onPostExecute(String result) {
    super.onPostExecute(result);
    prog.dismiss();
    tv.setText(result);
}
}
}

^-(导致错误:android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views

【问题讨论】:

标签: java android iterator web-scraping jsoup


【解决方案1】:

将要更新的视图作为 MyTask 的构造函数参数传递,例如

new MyTask(tv).execute(URL);

相应地更改您的 MyTask 以接受此参数。

【讨论】:

  • 谢谢!附言如果您想回答另一个简单的问题 - 我还有另一个(相关)问题! :)stackoverflow.com/questions/18904302/…
  • @OhNoItsAnOverflow:找不到页面!!! (这个问题是作者自愿删除的)
猜你喜欢
  • 2017-10-25
  • 2020-09-28
  • 2012-11-15
  • 2013-09-25
  • 1970-01-01
  • 2017-11-06
  • 1970-01-01
  • 2017-01-09
  • 2016-11-19
相关资源
最近更新 更多