java - 在线程的帮助下读取 URL 页面 - Android

标签 java android multithreading url android-asynctask

我有点天真,以为我可以像在 Java 中一样读取网页,但显然你需要使用线程或 AsyncTask。我以前没有这方面的经验,而且事实证明这很麻烦。

我已阅读 http://www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html (3.点)我半明白,但是当我尝试将其应用到我的问题中时,一切都崩溃了。

这是我的问题:

  1. 我需要从 URL 中读取内容,它是 RSS 源。
  2. 一起解析
  3. 将其插入ListView(数组适配器)

这是我尝试重新创建的 AsyncTask 类。我只是希望它返回一个缓冲的阅读器,或整个页面,但它始终为空。

private class DownloadWebPageTask extends AsyncTask<String, Void, BufferedReader> {

     @Override
     protected BufferedReader doInBackground(String... urls) {
         BufferedReader bs;
         URL url = null;
         try {
             url = new URL(urls[0]);
         } catch (MalformedURLException e) {
             e.printStackTrace();
         }
         try {
             bs = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
             return bs;
         } catch (IOException e) {
             e.printStackTrace();
         }
         return null;
    }

    protected void onPostExecute(BufferedReader result) {
        br = result;
    }
}

public RSS() throws IOException, ExecutionException, InterruptedException {
    DownloadWebPageTask dl = new DownloadWebPageTask();
    dl.execute(new String[]     {"http://www.promet.si/dc/PROMET.ROADEVENTS.PP.RSS.SL"});
}

如果这是一个愚蠢的问题,我很抱歉,但我不完全理解解释这一点的帖子,我必须解决这个问题。我只需要任何形状或形式的页面内容。 (可以是StringBufferedReader)

最佳答案

@Override
    protected String doInBackground(String... urls) throws IOException {
        URLConnection connection = new URL(urls[0]).openConnection();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()),"UTF-8");
        StringBuilder stringBuilder = new StringBuilder();
        String buffer;
        while ((buffer = bufferedReader.readLine()) != null) {
            stringBuilder.append(buffer);
        }
        return stringBuilder.toString();
    }

使用缓冲读取器在后台线程中逐行读取,并使其返回字符串。

关于java - 在线程的帮助下读取 URL 页面 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40975044/

相关文章:

java - Spring Restfull Jax-RS 注释支持

java - 从java中的List中获取元素的范围

java - 当我尝试在虚拟设备上启动它时出现 tictactoe 错误

Android getResources().getDrawable() 已弃用 API 22

c# - 在 ManualResetEvent 或 Thread.Sleep() 之间做出选择

java - 并发 hashmap 可以处理多达 10000 个线程而不发生死锁吗?

Java Servlet 继续发送消息

java - 使用 PDFBox 嵌入字体以扁平化 PDF 表单

android - 在哪里可以找到 Google Play 服务属性文本?

Android:Thread.sleep 没有结束