安卓异步Http Get请求

5

我正在尝试实现一个httpClient类,它是一个AsyncTask(否则我会因为在主线程中有连接而引发异常)。 我尝试了这样的代码:

private class execHttpAsync extends AsyncTask <String, String, HttpResponse>
    {
        public String resultString;

        @Override
        protected HttpResponse doInBackground(String... params) 
        {
            String url = params[0];

            HttpClient httpClient = new DefaultHttpClient();
            HttpGet request = new HttpGet(url);           
            request.setHeader("Content-Type", "text/xml");
            HttpResponse response;
            try {
                response = httpClient.execute(request);
            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return response;
        }

        @Override
       protected void onPostExecute(HttpResponse result) 
        {
            StringBuffer returned = new StringBuffer();

            InputStream content = result.getEntity().getContent();
            BufferedReader rd = new BufferedReader(new InputStreamReader(content, "UTF-8"));                
            String line;
            while ((line = rd.readLine()) != null) 
            {
                String endOfLine = "";
                returned.append(line + endOfLine);
            }
            content.close(); 

         String retVal = returned.toString();

         try 
         {
             String header = retVal.substring(0, 1);
             if (!header.equals("<"))
              {
                retVal = retVal.replace(header, "");
              }
         } 
         catch (Exception e) 
         {
            // TODO: handle exception
         }

         resultString = returned.toString();

        }

    }

但是我最终需要获取响应。我尝试实例化这个类,然后将响应作为成员获取,但是那样并没有奏效。 有什么建议吗?


你遇到了什么样的错误?你没有得到结果吗?如果有的话,请发布堆栈跟踪。 - soren.qvist
2个回答

12

试试这个方法

private class DownloadWebPageTask extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... urls) {
      String response = "";
      for (String url : urls) {
        DefaultHttpClient client = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);
        try {
          HttpResponse execute = client.execute(httpGet);
          InputStream content = execute.getEntity().getContent();

          BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
          String s = "";
          while ((s = buffer.readLine()) != null) {
            response += s;
          }

        } catch (Exception e) {
          e.printStackTrace();
        }
      }
      return response;
    }

    @Override
    protected void onPostExecute(String result) {
      textView.setText(result);
    }
  }

1

这是异步操作,因此任何像以下这样的东西:

myRetValue = new myAsyncTask.execute();

不会将onPostExecute()的返回值分配给myRetValue。您的

resultString = returned.toString();

应该导致将returned.toString()生成的任何内容分配给resultString变量(我猜测它在您的AsyncTask类之外声明,因此基本上您的代码乍一看看起来很好。您可能只是没有在returned中放置任何内容。尝试在您的AsyncTask代码中设置一些断点,并检查它是否真的像您认为的那样运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接