2012-10-27 6 views
5

私はAsyncTaskであるhttpClientクラスを実装しようとしています(そうでなければ、私のメインスレッドに接続しているために例外が発生します)。 私はこのような何か試してみました:Android Async Httpリクエストを取得

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

     } 

    } 

をしかし、私は最終的に応答を取得する必要があります。私はこのクラスをインスタンス化しようとしましたが、メンバーとしてレスポンスを取得しましたが、それはうまくいきませんでした。 提案がありますか?

myRetValue = new myAsyncTask.execute(); 

onPostExecute()からmyRetValueに戻り値を代入しません。

+0

どのようなエラーが発生していますか?結果が得られませんか? –

答えて

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

を試してみてくださいこれは、それゆえのようなものは、非同期操作です。あなたの

resultString = returned.toString(); 

は、私はあなたのコードは一見正常に見えるので、基本的に、あなたのAsyncTaskクラス外で宣言されていると思いますresultString変数(に割り当てられて製造どんなreturned.toString()持つにつながるはずです。あなたは単にreturnedには何も持っていないことがあります。試してみてくださいあなたのAsyncTaskコードにいくつかのブレークポイントを植えて、あなたが思った通りに実際に動作するかどうかを検査してください。

関連する問題