1

マルチパート (C# の場合) でファイルを受信する Web サービスがあります。大きなファイル (15MB) を chrome 拡張機能 (Advanced Rest 拡張機能) で送信すると、ファイルは正常にアップロードされ、本文の応答が表示されます。

 <response xmlns="http://schemas.datacontract.org" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Descripcion>blabla</Descripcion>
<Resultado>-9999</Resultado>
<Servicio xmlns:a="http://schemas.datacontract.org" i:nil="true" />
 </reponse>

しかし、Androidで呼び出すと、200コードのOK応答でヘッダーを取得しますが、本文の応答を取得する方法がわかりません:

これは私のコードです:

/****** Informacion exif *****/

                DefaultHttpClient mHttpClient;
                HttpParams params = new BasicHttpParams();
                params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
                mHttpClient = new DefaultHttpClient(params);
                HttpPost httppost = new HttpPost("HTTPS://SERVICIO.SVC");
                httppost.setHeader("Connection", "Keep-Alive");
                httppost.setHeader("SOAPAction", "http://tempuri.org/Service1");
                httppost.setHeader("identificadorGUID", Guid);
                httppost.setHeader("numeroServicio", codigoServicio);
                httppost.setHeader("coordenadaLatitud", latitud);
                httppost.setHeader("coordenadaLongitud", longitud);
                if (QUEES == 0) {
                    extension = "jpg";

                }
                if (QUEES == 1) {
                    extension = "mp4";

                }
                httppost.setHeader("cuando", cuando);
                httppost.setHeader("tipoMultimedia", String.valueOf(tipoMultimedia));
                httppost.setHeader("extension", extension);

                MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
                FileBody fileBody = new FileBody(fichero, "multipart/form-data");
                multipartEntity.addPart("image", fileBody);
                httppost.setEntity(multipartEntity);
                try {
                    HttpResponse response = mHttpClient.execute(httppost);
                    HttpEntity resEntity = response.getEntity();
                    if (resEntity != null) {
                        resEntity.consumeContent();
                    }
                    BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
                    String sResponse;
                    StringBuilder s = new StringBuilder();
                    httppost.getAllHeaders();

                    while ((sResponse = reader.readLine()) != null) {
                        s = s.append(sResponse);
                    }
                    Log.i("Respuesta web service", sResponse);
                }
                catch (ClientProtocolException e1) {
                    e1.printStackTrace();
                }
                catch (IOException e1) {
                    e1.printStackTrace();
                }

クラッシュ: java.io.IOException: クローズされたストリームから読み取ろうとしました。

それを解析するための応答を取得するにはどうすればよいですか? ありがとう

4

1 に答える 1

0

情報が読み取られるまで呼び出してはいけないようですconsumeContent()(ストリームが閉じられることを考えると)。4.1 以降を使用している場合、このメソッドは非推奨になっているため、使用する必要があります。EntityUtils.consume(HttpEntity)

そのjavadocから:

このメソッドは、このエンティティのコンテンツが不要になったことを示すために呼び出されます。すべてのエンティティ実装は、このメソッド呼び出しの結果として、割り当てられたすべてのリソースを解放することが期待されています。コンテンツ ストリーミング エンティティは、残りのコンテンツがあればそれを破棄することも期待されます。ラッピング エンティティは、この呼び出しをラップされたエンティティに委譲する必要があります。

于 2012-09-05T10:00:35.197 に答える