問題タブ [okhttp3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
3414 参照

android - Okhttp と GSON ライブラリを使用して JSON 応答を解析すると、メインスレッドの例外でネットワークが発生します

以下に示すプロジェクトのgradleファイルに依存関係を指定しました。

「com.google.code.gson:gson:2.4」をコンパイルします

「com.squareup.okhttp3:okhttp:3.1.2」をコンパイルします

例外android.os.NetwokOnMainThreadExceptionが発生しています

リンクの下にあるOKHTTPレシピフォームをすでに確認しているため、その問題を解決する方法を取得できません。 https://github.com/square/okhttp/wiki/レシピ

0 投票する
1 に答える
907 参照

android - リクエストで If-None-Match が渡されない

私はこのトピックについて長い議論を見てきましたが、2.3.0 で修正されると言われています。私が使っている組み合わせはこちら

受信した応答に対して表示されるログには、Etag があります。しかし、その後のリクエストでは、ヘッダーに If-None-Match が渡されていません。コードで明示的に If-None-Match を挿入してテストしたところ、キャッシュが機能し、応答が期待されていました。したがって、使用しているライブラリのバージョンに問題があるか、コードに問題があることは確かです。

ここでは、okClient をセットアップしています。

ヘッダー インターセプターには、API 自体に重点を置いたロジックが含まれています。ここにあります

そして、これがキャッシュを設定する方法です。

解決策を見つけるのにかなりの時間を費やしましたが、運がなかったので、迅速で効果的な応答を探しています。

ありがとう

0 投票する
1 に答える
2613 参照

java - OkHttpClient はタグによる呼び出しをキャンセルできません

最近OkHttp3にアップグレードしたところ、クライアントから直接タグによる呼び出しをキャンセルできなくなっていることに気付きました。これは、アプリケーションで処理する必要があります。

ここのCHANGELOGに記載されています:

呼び出しのバッチをキャンセルすることは、アプリケーションの責任になりました。 タグによる呼び出しをキャンセルする API は削除され、より一般的なメカニズムに置き換えられました。ディスパッチャーは、runningCalls() および queuedCalls() メソッドを介してすべての進行中の呼び出しを公開するようになりました。タグ、ホストなどによって呼び出しを選択し、不要になった呼び出しに対して Call.cancel() を呼び出すコードを作成できます。

実行中またはキューに入れられた Call をタグでキャンセルする簡単なユーティリティ メソッドを使用して、この投稿に自己回答しています。

0 投票する
0 に答える
445 参照

android - サーバーへの mp4 ビデオのアップロード、SSLException

okhttp3 経由でサーバーにビデオをアップロードしているときに SSLException が発生しました。

エラーは

ビデオのサイズは 15.5 MB です。私が間違っていることを考えましたか?前もって感謝します!

5MB未満のサイズでも送信可能です。バックエンドでは、制限 'client_max_body_size' == 60MB を設定するように言われました

0 投票する
0 に答える
662 参照

java - byteStream の使用時に OkHttpClient が接続をリークする

送信するすべてのリクエストの本文をすべて閉じたにもかかわらず、Logcat メッセージに接続リークの警告が表示され続けます。

GET および POST リクエスト用の 2 つのラッパー メソッドがあり、リクエストを開始してレスポンスを返します。

InputStream私は、そのように応答を介して読み取ることにより、応答本文を文字列に変換することを処理する3番目の方法を持っていますbody().byteStream()

すべてのgetRequest()or postRequest()I 呼び出しの後にgetResponseBodyAsString()メソッドが続き、ユーザーがリクエスト間でログアウトすると、本体も閉じられます。それでも、接続リークの警告が表示されます..

他のコードが必要な場合は、お気軽にお問い合わせください。

ありがとうございます。

編集

コードの別のブロックが役立つかどうかはわかりません。例外をキャッチ するオブジェクトを呼び出すgetRequest()か、オブジェクトにpostRequest()カプセル化されるすべてのオブジェクト。ASyncTask

現在、body()これらの応答を閉じるものは何もありませんが、リーク警告が表示された場合、ASyncTaskキャンセルされることはありません。そのため、閉じるのを妨げている例外はありません。

EDIT2

この投稿を読んだ後、"Accept-Encoding...gzip" ヘッダーを手動で追加すると、GZIP が透過的に処理されないことに気付きました。手動の追加を削除すると、透過的にデコードできますが、応答本文でドキュメントの 1 行しか取得できません。

透過的に処理される GZIP

<td align="center"><img width="208" height="110" src="images/alert_loginlogo.gif" /></td

文字通り、それが私が返すすべてです。自分でストリームのデコードを処理すると、問題なくドキュメント全体を取得できます。

これはライブラリのバグでしょうか。ここで途方に暮れています。