2011-01-21 17 views
1

私はwebserviceをPHPで作っています。私はパラメータを掲示しており、サーバからデータを取得しています。少量のデータに対しては正常に動作します。HTTP POST + ANDROID応答がありません!

私は10 xmlのレコードを返すテストサービスを1つ持っています。すべての160 xmlレコードを持つ同じWebサービスがデータを取得していません。

私は以下のコードを貼り付けました。データ量に制限がありますか、他のパラメータを渡す必要がありますか?

public void LoadNews(String Url, List<NameValuePair> nvp) { 
    InputStream ins = null; 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost(Url); 
    httppost.setHeader("Content-Type", "application/x-www-form-urlencoded"); 

    try { 
     // Add your data 
     List<NameValuePair> nameValuePairs = nvp; 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

     // Execute HTTP Post Request 
     HttpResponse response = httpclient.execute(httppost); 

     ins = response.getEntity().getContent(); 
     BufferedInputStream bis = new BufferedInputStream(ins); 
     ByteArrayBuffer baf = new ByteArrayBuffer(1024); 

     int current = 0; 
     while ((current = bis.read()) != -1) { 
      baf.append((byte) current); 
     } 
     String response = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" 
       + new String(baf.toByteArray()); 
    } catch (ClientProtocolException e) { 
     Log.e(CommonFunctions.LOGTAG, "ClientProtocolException"); 
    } catch (IOException e) { 
     Log.e(CommonFunctions.LOGTAG, "IOException"); 
    } 

私はFirefoxのアドオン+ポスターと同じWebサービスをテストして...と正常に動作してXML応答でCDATAを与えます。

+0

詳細をお知らせください。 「データを取得しない」とは、Webサービスが意味するすべてのデータを返さないということですか?それ以外の場合は、Logcatの出力を提供できますか? – Dave

+0

こんにちはdave、HttpResponseレスポンス= httpclient.execute(httppost);私はこれに答えて何も得ていません。私が応答を監視するときImはステータスコード200/OKを取得しています...それはいくつかのレスポンスを意味しますが、イン=レスポンスの何も取得していないことを意味します。 –

+0

私は正しい方法で応答データを取得していますか? –

答えて

0

これは答えではありませんが、HTTPコンテンツの取得にはBasicResponseHandlerを使用することをお勧めします。それはすべてのストリーミング/バッファリングナンセンスを保存! (つまり、あなたのtry句のほとんど)

String response = httpclient.execute(httppost, new BasicResponseHandler()); 

これをより明確にするには、次の補遺として

public void LoadNews(String Url, List<NameValuePair> nvp) { 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost(Url); 
    httppost.setHeader("Content-Type", "application/x-www-form-urlencoded"); 

    try { 
     // Add your data 
     List<NameValuePair> nameValuePairs = nvp; 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

     // Execute HTTP Post Request 
     String response = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + 
      httpclient.execute(httppost, new BasicResponseHandler()); 

     /* ... do stuff with response ... */ 
    } catch (ClientProtocolException e) { 
     Log.e(CommonFunctions.LOGTAG, "ClientProtocolException"); 
    } catch (IOException e) { 
     Log.e(CommonFunctions.LOGTAG, "IOException"); 
    } 
} 

、あなたは手動でXMLヘッダを付加することではない必要があります - これはドキュメントに返されるべきです使用しているWebサービスによって異なります。

+0

詳細を教えてください。または関連する例? –

+0

私もこれを使用しましたが、response1 = "<?xml version = \" 1.0 \ "encoding = \" UTF-8 \ "?>"はWebサービスからの応答がないことを意味します –

+0

いいえ、 。応答がない場合、例外がスローされます。これを自分でデバッグし、POST要求が正しいことを確認する必要があります。デバッグ出力をWebサービスに追加する方が簡単なので、Androidコードによってどのようなリクエストが行われているかを正確に確認することができます。 – Dave

関連する問題