我无法弄清楚如何使这个代码在 AsyncTask 中工作,我搜索了多个示例,但它一直在崩溃。我在互联网上找到了这个简单的代码,我想调整它以从文本字段获取URL并获取HTML代码。我发现它必须在AsyncTask中,否则它将无法工作,但即使在AsyncTask中我也无法使其工作。这是我的代码:
String ETURL = ETURLInput.getText().toString();
try {
URL TestURL = new URL(ETURL);
BufferedReader bufferReader = new BufferedReader(
new InputStreamReader(TestURL.openStream()));
String outputCode;
while ((outputCode = bufferReader.readLine()) != null)
TVCode.setText(outputCode);
bufferReader.close();
} catch (Exception e) {
TVCode.setText("Oops, something went wrong.")
}
}
这是需要在ActionListener中执行的代码。因此,当我单击按钮时,它应该在AsyncTask中执行此代码。
希望有人能帮助我。
答案 0 :(得分:0)
您忘记添加openConnection
,在创建网址对象后添加:URLConnection conn = TestURL.openConnection();
。
要使其与asynctask一起使用,您可以做的是将字符串存储在类变量中,将其返回doInBackGround
并在onPostExecute
中使用。
您可以在asynctask中创建的方法示例:
protected String getContentUrl(String URL) {
String line=null;
String result="";
try {
try {
URL url;
// get URL content
url = new URL(URL);
URLConnection conn = url.openConnection();
// open the stream and put it into BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
line=br.readLine();
while (line!= null) {
result=result+line;
line=br.readLine();
}
//System.out.print(result);
br.close();
return result;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
然后您就会以doInBackGround
:
getContentUrl(YOUR URL HERE)
将此值存储在String中,然后将其返回。然后,您可以在onPostExecute
希望有所帮助:)