我正在尝试使用OkHTTP库.调用服务器并获得成功响应时.我需要更新UI.
使用enqueue()进行异步调用时如何才能完成?
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
if (response.isSuccessful()) {
// NEED TO UPDATE UI HERE
}
}
});
Run Code Online (Sandbox Code Playgroud) 我正在使用Retrofit 2-beta2和OkHttp 2.7.0.
为了OkHttpClient从Retrofit 获取对象,我正在使用Retrofit .client()方法并取消所有正在运行的请求,我称之为取消(Object tag)方法,但请求仍然继续运行,我得到了响应.
即使客户Dispatcher的getQueuedCallCount()和getRunningCallCount()返回0调用cancel()之后.
还有什么我需要做的才能工作吗?或者它可能是OkHttp中的错误?
作为一种解决方法,我打电话shutdownNow()给客户,ExecutorService 但我更喜欢更清洁的解决方案.
我正在使用Google Volley和Gson编写我的应用程序,使用OkHttp作为HTTP-Stack与REST服务进行通信.这大部分时间都很好用但是当我暂停我的应用并返回它时,HTTP请求不能用于此异常:
09-08 19:29:19.611: E/ASDF(21827): com.android.volley.NoConnectionError: java.io.EOFException
09-08 19:29:19.611: E/ASDF(21827): at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:125)
09-08 19:29:19.611: E/ASDF(21827): at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:105)
09-08 19:29:19.611: E/ASDF(21827): Caused by: java.io.EOFException
09-08 19:29:19.611: E/ASDF(21827): at java.util.zip.GZIPInputStream.readFully(GZIPInputStream.java:206)
09-08 19:29:19.611: E/ASDF(21827): at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:98)
09-08 19:29:19.611: E/ASDF(21827): at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:81)
09-08 19:29:19.611: E/ASDF(21827): at com.squareup.okhttp.internal.http.HttpEngine.initContentStream(HttpEngine.java:461)
09-08 19:29:19.611: E/ASDF(21827): at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:659)
09-08 19:29:19.611: E/ASDF(21827): at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:346)
09-08 19:29:19.611: E/ASDF(21827): at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:295)
09-08 19:29:19.611: E/ASDF(21827): at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:489)
09-08 19:29:19.611: E/ASDF(21827): at com.squareup.okhttp.internal.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:136)
09-08 19:29:19.611: E/ASDF(21827): at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:109)
09-08 19:29:19.611: E/ASDF(21827): at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:93)
09-08 19:29:19.611: …Run Code Online (Sandbox Code Playgroud) OkHttp 2.3根据OKHttp文档,我正在使用基本身份验证请求,它会自动重试未经身份验证的请求,但每当我提供无效凭据时,请求都会花费太多时间,最后我得到了这个异常:
java.net.ProtocolException:后续请求太多:21
如何阻止OkHttp自动重试未经身份验证的请求,然后返回401 Unauthorized?
我收到了这个错误
java.io.IOException: Content-Length and stream length disagree
Run Code Online (Sandbox Code Playgroud)
在这行代码上 return response.body().bytes();
这是完整的代码
编辑:在一些谷歌之后,错误的原因来自okhttp lib
if (contentLength != -1L && contentLength != bytes.size.toLong()) {
throw IOException(
"Content-Length ($contentLength) and stream length (${bytes.size}) disagree")
}
Run Code Online (Sandbox Code Playgroud)
但是如何解决这个问题?
编辑:
这是完整的代码:
public class OkHttpHandler extends AsyncTask<Void, Void, byte[]> {
private final String Fetch_URL = "http://justedhak.comlu.com/get-data.php";
ArrayList<Listitem> Listitem;
int resulta;
OkHttpClient httpClient = new OkHttpClient();
String myJSON;
JSONArray peoples = null;
InputStream inputStream = null;
@Override
protected byte[] doInBackground(Void... params) {
Log.d("e", "dddddddddd");
Log.d("e", Fetch_URL);
Request.Builder …Run Code Online (Sandbox Code Playgroud) 如何使用OkHttp v3 管理动态文件数量的上传,我已经使用旧版本的OkHttp实现了compile 'com.squareup.okhttp:okhttp:2.6.0'
类Form中有一些变化,现在对Multipart体进行建模.他们用更强大的FormBody和FormBody.Builder组合替换了不透明的FormEncodingBuilder.同样,他们将MultipartBuilder升级为MultipartBody,MultipartBody.Part和MultipartBody.Builder.
下面的代码是旧版本
final MediaType MEDIA_TYPE = MediaType.parse(AppConstant.arrImages.get(i).getMediaType());
//If you can have multiple file types, set it in ArrayList
MultipartBuilder buildernew = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addFormDataPart("title", title); //Here you can add the fix number of data.
for (int i = 0; i < AppConstants.arrImages.size(); i++) { //loop to add dynamic number of files.
File f = new File(FILE_PATH,TEMP_FILE_NAME + i + ".png");
if (f.exists()) {
buildernew.addFormDataPart(TEMP_FILE_NAME + i, TEMP_FILE_NAME + i + FILE_EXTENSION, RequestBody.create(MEDIA_TYPE, f)); …Run Code Online (Sandbox Code Playgroud) 是否可以OkHttpClient限制实时连接的数量?因此,如果达到限制,则不会选择和建立新连接?
我的应用程序同时启动了许多连接.
当我尝试创建新的OkHttpClient对象时,抛出异常
我正在使用OkHttp 3.11.0和OkIO 2.0.0-RC1。
okhttp3.internal.Util。(Util.java:60)上的okhttp3.OkHttpClient。(OkHttpClient。 java:123)at p12.Main.main(Main.java:8)原因:java.lang.ClassNotFoundException:java.net.URLClassLoader.findClass(URLClassLoader.java:381)的kotlin.TypeCastException .loadClass(ClassLoader.java:424)at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:349)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)... 4另外
Some users of my Android application are frequently running into a network error with the following error message: "Unexpected end of stream on null".
I didn't find any clear way to solve it by looking at other similar question. I haven't been able to reproduce the network error on my end.
1) I have unsuccessfully appended Connection=close to the requests headers as this answer suggests
2) I have unsucessflly added .retryOnConnectionFailure(true) as this answer suggests
3) I have unsuccessfully searched …
我StreamResetException: stream was reset: INTERNAL_ERROR从 OkHttp 得到的。有什么问题?
这是日志。
I/okhttp.OkHttpClient: <-- 200 https://www.example.com/user/list (396ms)
I/okhttp.OkHttpClient: date: Fri, 04 Dec 2020 02:21:35 GMT
I/okhttp.OkHttpClient: content-type: application/json
I/okhttp.OkHttpClient: content-length: 99730
I/okhttp.OkHttpClient: server: nginx/1.18.0
I/okhttp.OkHttpClient: allow: GET, HEAD, OPTIONS
I/okhttp.OkHttpClient: x-frame-options: DENY
I/okhttp.OkHttpClient: x-content-type-options: nosniff
I/okhttp.OkHttpClient: referrer-policy: same-origin
D/okhttp.Http2: << 0x00000003 5792 DATA
D/okhttp.Http2: << 0x00000003 4 RST_STREAM
D/okhttp.TaskRunner: Q10092 canceled : OkHttp ConnectionPool
D/force: okhttp3.internal.http2.StreamResetException: stream was reset: INTERNAL_ERROR
D/okhttp.Http2: >> 0x00000000 8 GOAWAY
D/okhttp.TaskRunner: Q10096 finished run in 216 ms: …Run Code Online (Sandbox Code Playgroud)