android - 从 asynctask android 获取字符串

标签 android jsoup html-parser

如何从 AsyncTask 获取字符串?我使用 jsoup 从 URL 中检索内容。在下面的例子中,我已经获得了内容,但我无法将该内容放入 getItembody 字符串中。代码是:

    private String content;
    private static final String HTML_HEADER = "<html><body>";
    private static final String HTML_HEADER = "</body></html>";

    private void SetView(){ 
            contentsWebView.loadData(HTML_HEADER + getItemBody(item) + HTML_FOOTER,
            "text/html", "utf-8");
    }      

    private String getItemBody(Item item) {
        String body = "";
        new LoadContent().execute("");
        return body;
    }

    private class LoadContent extends AsyncTask<String, Integer, String> {
        private ProgressDialog Dialog = new ProgressDialog(
                ViewItemActivity.this);

        @Override
        protected String doInBackground(String... params) {
            String url = "http://inet.detik.com/read/2012/12/21/205518/2124977/398/dosen-unibraw-bikin-aplikasi-pengubah-suara-ketulisan";
            Document doc;
            try {
                doc = Jsoup.connect(url).get();
                Elements element = doc.select(".text_detail");

                String content = element.toString();
                Log.v("LogContentView", content);
            } catch (IOException e) {
                e.printStackTrace();
            }

            return content;
        }

        protected void onPreExecute() {
            Dialog.setMessage("loading content...");
            Dialog.show();
        }

        protected void onPostExecute(Void unused) {
            Dialog.dismiss();
        }
    }

我的问题是我想将 doinbackground 中的字符串内容放入字符串名为 body 的 getItemBody 字符串中,并且我想在对话框关闭后得到结果。当前对话框不会自行关闭,但应该按返回键返回。这是 logcat Log.v("LogContentView", content);

的结果
12-27 10:12:10.979: V/LogContentView(2660): <div class="text_detail">
12-27 10:12:10.979: V/LogContentView(2660):  Malang - Indonesia memang memiliki developer aplikasi handal. Salah satunya dibuktikan Eko Sakti, dosen Universitas Brawijaya yang sukses menciptakan aplikasi di Windows Phone yang mampu membuat catatan tanpa harus menulis.
12-27 10:12:10.979: V/LogContentView(2660):  <br />
12-27 10:12:10.979: V/LogContentView(2660):  <br />Never Write -- demikian nama aplikasi tersebut -- bisa dibilang baru di Indonesia. Kemampuannya adalah mengubah 
12-27 10:12:10.979: V/LogContentView(2660):  <em>speech</em> (ucapan) bahasa Inggris menjadi bentuk teks. 
12-27 10:12:10.979: V/LogContentView(2660):  <br />
12-27 10:12:10.979: V/LogContentView(2660):  <br />Eko mengaku, ide pembuatan aplikasi ini berawal saat mengikuti program Summer School di Bali yang bentuk pengajarannya menggunakan bahasa Inggris.
12-27 10:12:10.979: V/LogContentView(2660):  <br />
12-27 10:12:10.979: V/LogContentView(2660):  <br />&quot;Waktu itu saya ikut Summer School dan dosen yang mengajar menggunakan bahasa Inggris. Saya mencoba mencatat mungkin karena terlalu cepat berbicaranya, banyak yang tertinggal. Setelah di rumah saya coba buka kembali catatan saya, malah tambah bingung,&quot; cerita Eko kepada wartawan di Universitas Brawijaya, Jumat (21/12/2012).
12-27 10:12:10.979: V/LogContentView(2660):  <br />
12-27 10:12:10.979: V/LogContentView(2660):  <br />Ditambahkannya, aplikasi Never Write bisa diupload di evernote. Selain itu aplikasi ini juga mempunyai kelebihan di antaranya bisa diakses di segala tempat dengan catatan file aplikasi sudah tersimpan pada perangkat genggam.
12-27 10:12:10.979: V/LogContentView(2660):  <br />
12-27 10:12:10.979: V/LogContentView(2660):  <br />Never Write tidak mempunyai batasan dalam memasukkan jumlah kata. Sehingga bisa digunakan sebagai sub title film yang nantinya bisa diubah dalam bahasa Indonesia.
12-27 10:12:10.979: V/LogContentView(2660):  <br />
12-27 10:12:10.979: V/LogContentView(2660):  <br />Sebagai bukti sahih kehebatannya, aplikasi ini pun sukses meraih gelar dalam kompetisi Nokia Lumia Apps Olympiad yang berlangsung dari pertengahan November 2012 lalu.
12-27 10:12:10.979: V/LogContentView(2660):  <br />
12-27 10:12:10.979: V/LogContentView(2660):  <br />Dalam kompetisi tersebut terdapat 428 developer peserta dari sekitar 40 kampus yang tersebar di seluruh Indonesia.
12-27 10:12:10.979: V/LogContentView(2660):  <br />
12-27 10:12:10.979: V/LogContentView(2660):  <br />Dari semuanya, terpilih 54 finalis dan 20 pemenang, dimana salah satunya adalah Eko Sakti.
12-27 10:12:10.979: V/LogContentView(2660):  <br />
12-27 10:12:10.979: V/LogContentView(2660):  <br />&quot;Salah satu pemilihan juri terhadap inovasi produk saya yaitu karena aplikasi yang saya ciptakan belum ada di pasaran. Penilaian yang lain juga ada pada fungsi atau kegunaan dari produk yang diciptakan,&quot; beber Eko. 
12-27 10:12:10.979: V/LogContentView(2660):  <br />
12-27 10:12:10.979: V/LogContentView(2660):  <br />
12-27 10:12:10.979: V/LogContentView(2660):  <em>Nah</em>, setelah menang di ajang pembuatan aplikasi besutan Nokia tersebut, sang vendor asal Finlandia itu pun berencana untuk memasarkan aplikasi ciptaan Eko.
12-27 10:12:10.979: V/LogContentView(2660):  <br />
12-27 10:12:10.979: V/LogContentView(2660):  <br />
12-27 10:12:10.979: V/LogContentView(2660):  <br />
12-27 10:12:10.979: V/LogContentView(2660):  <br />
12-27 10:12:10.979: V/LogContentView(2660): </div>
12-27 10:12:40.059: V/LogContentView(2660): <div class="text_detail">
12-27 10:12:40.059: V/LogContentView(2660):  Malang - Indonesia memang memiliki developer aplikasi handal. Salah satunya dibuktikan Eko Sakti, dosen Universitas Brawijaya yang sukses menciptakan aplikasi di Windows Phone yang mampu membuat catatan tanpa harus menulis.
12-27 10:12:40.059: V/LogContentView(2660):  <br />
12-27 10:12:40.059: V/LogContentView(2660):  <br />Never Write -- demikian nama aplikasi tersebut -- bisa dibilang baru di Indonesia. Kemampuannya adalah mengubah 
12-27 10:12:40.059: V/LogContentView(2660):  <em>speech</em> (ucapan) bahasa Inggris menjadi bentuk teks. 
12-27 10:12:40.059: V/LogContentView(2660):  <br />
12-27 10:12:40.059: V/LogContentView(2660):  <br />Eko mengaku, ide pembuatan aplikasi ini berawal saat mengikuti program Summer School di Bali yang bentuk pengajarannya menggunakan bahasa Inggris.
12-27 10:12:40.059: V/LogContentView(2660):  <br />
12-27 10:12:40.059: V/LogContentView(2660):  <br />&quot;Waktu itu saya ikut Summer School dan dosen yang mengajar menggunakan bahasa Inggris. Saya mencoba mencatat mungkin karena terlalu cepat berbicaranya, banyak yang tertinggal. Setelah di rumah saya coba buka kembali catatan saya, malah tambah bingung,&quot; cerita Eko kepada wartawan di Universitas Brawijaya, Jumat (21/12/2012).
12-27 10:12:40.059: V/LogContentView(2660):  <br />
12-27 10:12:40.059: V/LogContentView(2660):  <br />Ditambahkannya, aplikasi Never Write bisa diupload di evernote. Selain itu aplikasi ini juga mempunyai kelebihan di antaranya bisa diakses di segala tempat dengan catatan file aplikasi sudah tersimpan pada perangkat genggam.
12-27 10:12:40.059: V/LogContentView(2660):  <br />
12-27 10:12:40.059: V/LogContentView(2660):  <br />Never Write tidak mempunyai batasan dalam memasukkan jumlah kata. Sehingga bisa digunakan sebagai sub title film yang nantinya bisa diubah dalam bahasa Indonesia.
12-27 10:12:40.059: V/LogContentView(2660):  <br />
12-27 10:12:40.059: V/LogContentView(2660):  <br />Sebagai bukti sahih kehebatannya, aplikasi ini pun sukses meraih gelar dalam kompetisi Nokia Lumia Apps Olympiad yang berlangsung dari pertengahan November 2012 lalu.
12-27 10:12:40.059: V/LogContentView(2660):  <br />
12-27 10:12:40.059: V/LogContentView(2660):  <br />Dalam kompetisi tersebut terdapat 428 developer peserta dari sekitar 40 kampus yang tersebar di seluruh Indonesia.
12-27 10:12:40.059: V/LogContentView(2660):  <br />
12-27 10:12:40.059: V/LogContentView(2660):  <br />Dari semuanya, terpilih 54 finalis dan 20 pemenang, dimana salah satunya adalah Eko Sakti.
12-27 10:12:40.059: V/LogContentView(2660):  <br />
12-27 10:12:40.059: V/LogContentView(2660):  <br />&quot;Salah satu pemilihan juri terhadap inovasi produk saya yaitu karena aplikasi yang saya ciptakan belum ada di pasaran. Penilaian yang lain juga ada pada fungsi atau kegunaan dari produk yang diciptakan,&quot; beber Eko. 
12-27 10:12:40.059: V/LogContentView(2660):  <br />
12-27 10:12:40.059: V/LogContentView(2660):  <br />
12-27 10:12:40.059: V/LogContentView(2660):  <em>Nah</em>, setelah menang di ajang pembuatan aplikasi besutan Nokia tersebut, sang vendor asal Finlandia itu pun berencana untuk memasarkan aplikasi ciptaan Eko.
12-27 10:12:40.059: V/LogContentView(2660):  <br />
12-27 10:12:40.059: V/LogContentView(2660):  <br />
12-27 10:12:40.059: V/LogContentView(2660):  <br />
12-27 10:12:40.059: V/LogContentView(2660):  <br />
12-27 10:12:40.059: V/LogContentView(2660): </div>
12-27 10:14:25.989: V/LogContentView(3178): <div class="text_detail">
12-27 10:14:25.989: V/LogContentView(3178):  Malang - Indonesia memang memiliki developer aplikasi handal. Salah satunya dibuktikan Eko Sakti, dosen Universitas Brawijaya yang sukses menciptakan aplikasi di Windows Phone yang mampu membuat catatan tanpa harus menulis.
12-27 10:14:25.989: V/LogContentView(3178):  <br />
12-27 10:14:25.989: V/LogContentView(3178):  <br />Never Write -- demikian nama aplikasi tersebut -- bisa dibilang baru di Indonesia. Kemampuannya adalah mengubah 
12-27 10:14:25.989: V/LogContentView(3178):  <em>speech</em> (ucapan) bahasa Inggris menjadi bentuk teks. 
12-27 10:14:25.989: V/LogContentView(3178):  <br />
12-27 10:14:25.989: V/LogContentView(3178):  <br />Eko mengaku, ide pembuatan aplikasi ini berawal saat mengikuti program Summer School di Bali yang bentuk pengajarannya menggunakan bahasa Inggris.
12-27 10:14:25.989: V/LogContentView(3178):  <br />
12-27 10:14:25.989: V/LogContentView(3178):  <br />&quot;Waktu itu saya ikut Summer School dan dosen yang mengajar menggunakan bahasa Inggris. Saya mencoba mencatat mungkin karena terlalu cepat berbicaranya, banyak yang tertinggal. Setelah di rumah saya coba buka kembali catatan saya, malah tambah bingung,&quot; cerita Eko kepada wartawan di Universitas Brawijaya, Jumat (21/12/2012).
12-27 10:14:25.989: V/LogContentView(3178):  <br />
12-27 10:14:25.989: V/LogContentView(3178):  <br />Ditambahkannya, aplikasi Never Write bisa diupload di evernote. Selain itu aplikasi ini juga mempunyai kelebihan di antaranya bisa diakses di segala tempat dengan catatan file aplikasi sudah tersimpan pada perangkat genggam.
12-27 10:14:25.989: V/LogContentView(3178):  <br />
12-27 10:14:25.989: V/LogContentView(3178):  <br />Never Write tidak mempunyai batasan dalam memasukkan jumlah kata. Sehingga bisa digunakan sebagai sub title film yang nantinya bisa diubah dalam bahasa Indonesia.
12-27 10:14:25.989: V/LogContentView(3178):  <br />
12-27 10:14:25.989: V/LogContentView(3178):  <br />Sebagai bukti sahih kehebatannya, aplikasi ini pun sukses meraih gelar dalam kompetisi Nokia Lumia Apps Olympiad yang berlangsung dari pertengahan November 2012 lalu.
12-27 10:14:25.989: V/LogContentView(3178):  <br />
12-27 10:14:25.989: V/LogContentView(3178):  <br />Dalam kompetisi tersebut terdapat 428 developer peserta dari sekitar 40 kampus yang tersebar di seluruh Indonesia.
12-27 10:14:25.989: V/LogContentView(3178):  <br />
12-27 10:14:25.989: V/LogContentView(3178):  <br />Dari semuanya, terpilih 54 finalis dan 20 pemenang, dimana salah satunya adalah Eko Sakti.
12-27 10:14:25.989: V/LogContentView(3178):  <br />
12-27 10:14:25.989: V/LogContentView(3178):  <br />&quot;Salah satu pemilihan juri terhadap inovasi produk saya yaitu karena aplikasi yang saya ciptakan belum ada di pasaran. Penilaian yang lain juga ada pada fungsi atau kegunaan dari produk yang diciptakan,&quot; beber Eko. 
12-27 10:14:25.989: V/LogContentView(3178):  <br />
12-27 10:14:25.989: V/LogContentView(3178):  <br />
12-27 10:14:25.989: V/LogContentView(3178):  <em>Nah</em>, setelah menang di ajang pembuatan aplikasi besutan Nokia tersebut, sang vendor asal Finlandia itu pun berencana untuk memasarkan aplikasi ciptaan Eko.
12-27 10:14:25.989: V/LogContentView(3178):  <br />
12-27 10:14:25.989: V/LogContentView(3178):  <br />
12-27 10:14:25.989: V/LogContentView(3178):  <br />
12-27 10:14:25.989: V/LogContentView(3178):  <br />
12-27 10:14:25.989: V/LogContentView(3178): </div>

最佳答案

从上面的代码中,变量主体必须从 new LoadNews().execute("").get() 返回,因此您可以如下更改函数 getItemBody

private void SetView(){ 
        // move uri here, and you can dinamyc uri.
        String uri = "http://inet.detik.com/read/2012/12/21/205518/2124977/398/dosen-unibraw-bikin-aplikasi-pengubah-suara-ketulisan";
        contentsWebView.loadData(HTML_HEADER + getItemBody(uri) + HTML_FOOTER,
        "text/html", "utf-8");
}

private String getItemBody(String uri) {
    String body = null;
    try {
        body = new LoadContent().execute(uri).get();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }
    return body;
}

并在下面的异步任务类中,

private class LoadContent extends AsyncTask<String, Integer, String> {
    private ProgressDialog Dialog = new ProgressDialog(
            ViewItemActivity.this);

    @Override
    protected String doInBackground(String... params) {
        String url = params[0];
        Document doc;
        try {
            doc = Jsoup.connect(url).get();
            Elements element = doc.select(".text_detail");

            content = element.toString();
            Log.v("LogContentView", content);
        } catch (IOException e) {
            e.printStackTrace();
        }

        return content;
    }

    protected void onPreExecute() {
        Dialog.setMessage("loading content...");
        Dialog.show();
    }

    protected void onPostExecute(String result) {
        Dialog.dismiss();
        super.onPostExecute(result);
    }

}

如果有错误日志请告诉我。

关于android - 从 asynctask android 获取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14049136/

相关文章:

android - 添加 com.google.firebase :firebase-firestore:11. 4.2 后出现 DexOverflowException

Android - 循环随机数组并且不重复

java - Android webview chromium 异常 - ContextResult::kFatalFailure: 支持的制服或变量太少

java - 如何为我的程序生成工作 jar 文件?

java - jSoup方法关闭android App

iphone - 如何解析 iPhone 应用程序中的 HTML 子标签?

android - 要求alarmManager不要在屏幕上和顶部显示闹钟时间和图标

java - jsoup 中 element.children 的替代方案

JAVA - 我需要将 JSOUP 中的相对路径更改为绝对路径

python - 为什么搜索查询表显示表头,而不是 BeautifulSoup (Python) 中的数据?