我有点天真,以为我可以像在 Java 中一样读取网页,但显然你需要使用线程或 AsyncTask
。我以前没有这方面的经验,而且事实证明这很麻烦。
我已阅读 http://www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html (3.点)我半明白,但是当我尝试将其应用到我的问题中时,一切都崩溃了。
这是我的问题:
- 我需要从 URL 中读取内容,它是 RSS 源。
- 一起解析
- 将其插入
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"});
}
如果这是一个愚蠢的问题,我很抱歉,但我不完全理解解释这一点的帖子,我必须解决这个问题。我只需要任何形状或形式的页面内容。 (可以是String
、BufferedReader
)
最佳答案
@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/