如何将此代码设为AsyncTask?

时间:2015-10-06 16:38:43

标签: android android-asynctask

我无法弄清楚如何使这个代码在 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中执行此代码。

希望有人能帮助我。

1 个答案:

答案 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

中使用它

希望有所帮助:)