【问题标题】:Android Async Http Get requestAndroid 异步 Http 获取请求
【发布时间】:2012-10-27 14:46:17
【问题描述】:

我正在尝试实现一个 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();

        }

    }

但我最终需要得到回应。我试图实例化这个类,然后作为成员获得响应,但没有成功。 有什么建议吗?

【问题讨论】:

  • 您遇到了什么错误?你没有得到结果吗?如果有,请发布堆栈跟踪。

标签: android http asynchronous


【解决方案1】:

试试这个方法

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);
    }
  }

【讨论】:

    【解决方案2】:

    这是异步操作,因此类似于:

    myRetValue = new myAsyncTask.execute();
    

    不会将来自onPostExecute() 的返回值分配给 myRetValue。你的

    resultString = returned.toString();
    

    应该导致将任何returned.toString() 生成分配给resultString 变量(我猜它是在你的AsyncTask 类之外声明的,所以基本上你的代码乍一看很好。你可能在returned 中没有任何东西。尝试在您的 AsyncTask 代码中植入一些断点,并检查它的行为是否真的如您所想。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 2018-04-10
      相关资源
      最近更新 更多