私はokttpを使用するHttpsURLConnectionを使用していますが、PUTを使用して約5KBのペイロードを送信するたびに、私はオーバー10キロバイトの大きなペイロードを送信するときに、それにもかかわらず、私は次のようなエラーになるだろう:それを送信するために再試行されると大量のペイロードで予期せぬストリームの終了
W/System.err: java.net.ProtocolException: unexpected end of stream
W/System.err: at com.android.okhttp.internal.http.HttpConnection$FixedLengthSink.close(HttpConnection.java:314) W/System.err: at com.android.okhttp.okio.RealBufferedSink.close(RealBufferedSink.java:241) W/System.err: at com.android.okhttp.okio.RealBufferedSink$1.close(RealBufferedSink.java:209) W/System.err: at java.io.FilterOutputStream.close(FilterOutputStream.java:67)
W/System.err: at com.mercadolibre.android.sdk.internal.HttpPut.performOperationBeforeConnect(HttpPut.java:52) W/System.err: at com.mercadolibre.android.sdk.internal.HttpOperation.execute(HttpOperation.java:100) W/System.err: at com.mercadolibre.android.sdk.internal.HttpOperation.execute(HttpOperation.java:74) W/System.err: at com.mercadolibre.android.sdk.Meli.put(Meli.java:534)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) W/System.err: at java.lang.Thread.run(Thread.java:818)
を、それが最終的に働くだろう、ペイロードがあることが示唆されている5再試行まで取ってsomestimes壊れていたり、接続にエラーがあります。
何が原因なのでしょうか?私はライブラリを見直しました。私はflush()とclose()を呼び出した後、Sinkはサイズエラーを起こしてはいけません。さらに、ペイロードの長さを使うために固定サイズを設定しようとしましたが、働く
ありがとうございます。
ありがとうございました。 payload.getBytes()。lengthを使用しています。そして、私の接続は固定長として設定されています。私はまた、長さを設定しないで、私のペイロードをDataOutputWriterにまっすぐ書いてみましたが、同じことが起こります。 –
'payload.getBytes()'から返された 'byte []'への参照を保存し、それをストリームに書き込むときにその 'byte []'を使用してみてください。私の推測では、 'payload.getBytes()'によって使われる文字セットは、あなたが本文を書くのに使っている文字セットと同じではないということです。これらの2つが異なれば、文字列にASCII以外の文字が含まれている場合、長さが変わります。 –
大きな見通しと私はそれを試みますが、ペイロードの内容は変更されないので毎回失敗しませんが、いくつかの再試行後に機能しますか?ありがとう。 –