标签: okhttp3

Firebase未报告与OkHttp相关的崩溃

在我面临的问题之后,我正在将我的代码从Google分析迁移到Firebase

  1. 某些自定义事件显示正确的值,而其他自定义事件虽然使用的代码在所有情况下都相同.如果需要可以提供代码.

更新:上面解决了,我发送大数据,所以它只是省略了它们.

  1. 在使用OkHttp(使用Android网络库和Asynctask)之前,firebase在崩溃报告中显示正确的行号,但在使用OkHttp之后没有,我可以确认我已经上传了正确的映射文件,因为其他非OKHttp相关的崩溃被正确报告.

所以我的担忧并不是例外,而是从哪里抛出?

Firebase崩溃报告之前 OKhttp

Exception java.net.SocketTimeoutException: connect timed out
java.net.PlainSocketImpl.socketConnect (PlainSocketImpl.java)
java.net.AbstractPlainSocketImpl.doConnect (AbstractPlainSocketImpl.java:334)
java.net.AbstractPlainSocketImpl.connectToAddress (AbstractPlainSocketImpl.java:196)
java.net.AbstractPlainSocketImpl.connect (AbstractPlainSocketImpl.java:178)
java.net.SocksSocketImpl.connect (SocksSocketImpl.java:356)
java.net.Socket.connect (Socket.java:586)
com.android.okhttp.internal.Platform.connectSocket (Platform.java:113)
com.android.okhttp.Connection.connectSocket (Connection.java:1432)
com.android.okhttp.Connection.connect (Connection.java:1390)
com.android.okhttp.Connection.connectAndSetOwner (Connection.java:1667)
com.android.okhttp.OkHttpClient$1.connectAndSetOwner (OkHttpClient.java:133)
com.android.okhttp.internal.http.HttpEngine.connect (HttpEngine.java:466)
com.android.okhttp.internal.http.HttpEngine.sendRequest (HttpEngine.java:371)
com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute (HttpURLConnectionImpl.java:503)
com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse (HttpURLConnectionImpl.java:438)
com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode (HttpURLConnectionImpl.java:567)
com.package.MyClass$4.doInBackground (MyClass.java:168)
com.package.MyClass$4.doInBackground (MyClass.java:161)
android.os.AsyncTask$2.call (AsyncTask.java:304)
java.util.concurrent.FutureTask.run (FutureTask.java:237)
android.os.AsyncTask$SerialExecutor$1.run (AsyncTask.java:243)
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1133)
java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:607)
java.lang.Thread.run (Thread.java:762)
Run Code Online (Sandbox Code Playgroud)

OkHttp之后的Firebase崩溃报告

Exception java.net.SocketTimeoutException: connect timed out
java.net.PlainSocketImpl.socketConnect (PlainSocketImpl.java)
java.net.AbstractPlainSocketImpl.doConnect (AbstractPlainSocketImpl.java:334)
java.net.AbstractPlainSocketImpl.connectToAddress (AbstractPlainSocketImpl.java:196)
java.net.AbstractPlainSocketImpl.connect (AbstractPlainSocketImpl.java:178)
java.net.SocksSocketImpl.connect (SocksSocketImpl.java:356)
java.net.Socket.connect (Socket.java:586) …
Run Code Online (Sandbox Code Playgroud)

android firebase okhttp3 firebase-analytics

19
推荐指数
2
解决办法
921
查看次数

ProtocolException:预期的':status'标头不存在

在工作应用程序中突然发生网络调用失败并出现协议异常.该应用程序一直工作到昨天,今天所有的网络呼叫都失败了.这些调用适用于HTTP,但使用HTTPS失败.

这是日志,

java.net.ProtocolException: Expected ':status' header not present
10-18 14:59:01.103 30746-30746/? W/System.err:     at okhttp3.internal.http.Http2xStream.readHttp2HeadersList(Http2xStream.java:262)
10-18 14:59:01.103 30746-30746/? W/System.err:     at okhttp3.internal.http.Http2xStream.readResponseHeaders(Http2xStream.java:145)
10-18 14:59:01.103 30746-30746/? W/System.err:     at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:53)
10-18 14:59:01.103 30746-30746/? W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
10-18 14:59:01.103 30746-30746/? W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
10-18 14:59:01.103 30746-30746/? W/System.err:     at codmob.com.campuswallet.app.ApiClient$1.intercept(ApiClient.java:66)
10-18 14:59:01.103 30746-30746/? W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
10-18 14:59:01.103 30746-30746/? W/System.err:     at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
10-18 14:59:01.103 30746-30746/? W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
10-18 14:59:01.103 30746-30746/? W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
10-18 14:59:01.103 30746-30746/? W/System.err:     at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:109)
10-18 14:59:01.103 30746-30746/? W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) …
Run Code Online (Sandbox Code Playgroud)

android protocolexception retrofit retrofit2 okhttp3

19
推荐指数
3
解决办法
1万
查看次数

OkHttp代理设置

我必须使用proxyHost和proxyPort设置代理以使用POST发送JSON.

public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
  Proxy proxyTest = new Proxy(Proxy.Type.HTTP,new InetSocketAddress("proxy", proxyPort));

  OkHttpClient client = new OkHttpClient()
  .proxy(proxyTest)
  .build();
  //OkHttpClient.Builder builder = new OkHttpClient.Builder();
  //builder.proxy(proxySAP);
  //client.setProxy(proxySAP)
  //OkHttpClient client = builder.build();;

  String post(String url, String json) throws IOException {

    RequestBody body = RequestBody.create(JSON, json);
    Request request = new Request.Builder()
        .url(url)
        .post(body)
        .build();
    try (Response response = client.newCall(request).execute()) {
      return response.body().string();
    }
  }
Run Code Online (Sandbox Code Playgroud)

当我尝试使用我在一些答案上看到的代理测试时,它指出了一个错误:

OkHttpClient类型中的方法proxy()不适用于参数(代理)

我使用OKHTTP 3.3.1(okhttp3)

我的问题是,我该怎么办?我做了一些像这样的测试:

OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.proxy(proxyTest);
client.setProxy(proxyTest)
OkHttpClient client = …

java proxy post json okhttp3

18
推荐指数
3
解决办法
2万
查看次数

CertPathValidatorException:未找到证书路径的信任锚

我将HTTPPinning添加到OKHTTPClient,示例代码是:

OkHttpClient client = new OkHttpClient();
client.setSslSocketFactory(getPinnedCertSslSocketFactory(context));


private SSLSocketFactory getPinnedCertSslSocketFactory(Context context) {
    try {
        KeyStore trusted = KeyStore.getInstance("BKS");
        InputStream incontext.getResources().openRawResource(R.raw.prod_keystore);
        trusted.load(in, "venkat@123".toCharArray());
        SSLContext sslContext = SSLContext.getInstance("TLS");
        TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(
                TrustManagerFactory.getDefaultAlgorithm());
        trustManagerFactory.init(trusted);
        sslContext.init(null, trustManagerFactory.getTrustManagers(), null);
        return sslContext.getSocketFactory();
    } catch (Exception e) {
        Log.e("MyApp", e.getMessage(), e);
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

我将应用程序上传到了Playstore,从过去的1年开始,它就运行良好.但从最近1周开始,它给出了以下问题,我使用的是版本com.squareup.okhttp的OkHttp:okhttp:2.7.4

java.security.cert.CertPathValidatorException: Trust anchor for 
          certification path not found.
javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
                  at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:357)
                  at com.squareup.okhttp.internal.io.RealConnection.connectTls(RealConnection.java:192)
                  at com.squareup.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:149)
                  at com.squareup.okhttp.internal.io.RealConnection.connect(RealConnection.java:112)
                  at com.squareup.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:184)
                  at …
Run Code Online (Sandbox Code Playgroud)

ssl android okhttp okhttp3

18
推荐指数
1
解决办法
4680
查看次数

使用okHttp上传图片

我想使用okhttp上传图像,但我无法找到Postpart的MultipartBuilder.我可以使用什么而不是这个.

这是我的代码

public static JSONObject uploadImage(File file) {

        try {

            final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");

            RequestBody req = new MultipartBuilder().setType(MultipartBody.FORM).addFormDataPart("userid", "8457851245")
                    .addFormDataPart("userfile","profile.png", RequestBody.create(MEDIA_TYPE_PNG, file)).build();

            Request request = new Request.Builder()
                    .url("url")
                    .post(req)
                    .build();

            OkHttpClient client = new OkHttpClient();
            Response response = client.newCall(request).execute();

            Log.d("response", "uploadImage:"+response.body().string());

            return new JSONObject(response.body().string());

        } catch (UnknownHostException | UnsupportedEncodingException e) {
            Log.e(TAG, "Error: " + e.getLocalizedMessage());
        } catch (Exception e) {
            Log.e(TAG, "Other Error: " + e.getLocalizedMessage());
        }
        return null;
    }
Run Code Online (Sandbox Code Playgroud)

提前致谢.

upload android image okhttp3

17
推荐指数
3
解决办法
2万
查看次数

okhttp中的java.net.SocketTimeoutException

这需要花费很多时间来获取数据json.当删除并再次安装它将json在1分钟内得到,当我再次点击按钮,json它需要这么多时间,仍然数据没有进入listview

这是我的异常代码

E/JSONDemo: IOExceptiojava.net.SocketTimeoutException
  at java.net.PlainSocketImpl.read(PlainSocketImpl.java:493)
  at java.net.PlainSocketImpl.-wrap0(PlainSocketImpl.java)
  at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:242)
  at okio.Okio$2.read(Okio.java:140)
  at okio.AsyncTimeout$2.read(AsyncTimeout.java:238)
  at okio.RealBufferedSource.indexOf(RealBufferedSource.java:325)
  at okio.RealBufferedSource.indexOf(RealBufferedSource.java:314)
  at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:210)
  at okhttp3.internal.http.Http1xStream.readResponse(Http1xStream.java:184)
  at okhttp3.internal.http.Http1xStream.readResponseHeaders(Http1xStream.java:125)
  at okhttp3.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:775)
  at okhttp3.internal.http.HttpEngine.access$200(HttpEngine.java:86)
  at okhttp3.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:760)
  at okhttp3.internal.http.HttpEngine.readResponse(HttpEngine.java:613)
  at okhttp3.RealCall.getResponse(RealCall.java:244)
  at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:201)
  at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:163)
  at okhttp3.RealCall.access$100(RealCall.java:30)
  at okhttp3.RealCall$AsyncCall.execute(RealCall.java:127)
  at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
  at java.lang.Thread.run(Thread.java:818)
Run Code Online (Sandbox Code Playgroud)

这是java文件中的json代码:

progress = ProgressDialog.show(MainActivity.this, "dialog title", "dialog message", true);
Toast.makeText(MainActivity.this, "ok", Toast.LENGTH_LONG).show();

    if (isNetworkAvailable()) {

        String url = "ConstantValue.URL";
        RequestBody formBody = new …
Run Code Online (Sandbox Code Playgroud)

android json socketexception okhttp okhttp3

16
推荐指数
2
解决办法
2万
查看次数

如何解决D8警告:D8:找不到类型`org.conscrypt.Conscrypt`

/Volumes/SSD/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp3/okhttp/3.10.0/7ef0f1d95bf4c0b3ba30bbae25e0e562b05cf75e/okhttp-3.10.0.jar: D8: Type `org.conscrypt.Conscrypt` was not found, it is required for default or static interface methods desugaring of `okhttp3.internal.platform.Platform okhttp3.internal.platform.ConscryptPlatform.buildIfSupported()`
Run Code Online (Sandbox Code Playgroud)

okhttp3

16
推荐指数
2
解决办法
8126
查看次数

使用retrofit2和OkHttp3时出现此错误.无法解析主机"<host-name>":没有与主机名关联的地址

我正在使用改造2和OkHttp3从服务器请求数据.我刚刚添加了一个离线缓存代码,但它没有按预期工作.我收到错误"无法解析主机"<>":没有与主机名关联的地址."

当它试图从缓存中获取检索数据时(没有互联网连接时)会发生这种情况.下面是一段代码片段.

public static Interceptor provideCacheInterceptor() {
    return new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Response response = chain.proceed(chain.request());

            // re-write response header to force use of cache
            CacheControl cacheControl = new CacheControl.Builder()
                    .maxAge(2, TimeUnit.MINUTES)
                    .build();

            return response.newBuilder()
                    .header(CACHE_CONTROL, cacheControl.toString())
                    .build();
        }
    };
}

public static Interceptor provideOfflineCacheInterceptor() {
    return new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();

            if (!hasNetwork) {
                CacheControl cacheControl = new CacheControl.Builder()
                        .onlyIfCached()
                        .maxStale(7, TimeUnit.DAYS) …
Run Code Online (Sandbox Code Playgroud)

android offline-caching okhttp retrofit2 okhttp3

15
推荐指数
1
解决办法
6800
查看次数

检测OkHttp响应是否来自缓存(使用Retrofit)

有没有办法检测Retrofit响应是来自配置的OkHttp缓存还是实时响应?

客户定义:

Cache cache = new Cache(getCacheDirectory(context), 1024 * 1024 * 10);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
            .cache(cache)
            .build();
Run Code Online (Sandbox Code Playgroud)

Api定义:

@GET("/object")
Observable<Result<SomeObject>> getSomeObject();
Run Code Online (Sandbox Code Playgroud)

示例电话:

RetroApi retroApi = new Retrofit.Builder()
            .client(okHttpClient)
            .baseUrl(baseUrl)
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
            .addConverterFactory(GsonConverterFactory.create())
            .build()
            .create(RetroApi.class);

result = retroApi.getSomeObject().subscribe((Result<SomeObject> someObjectResult) -> {
     isFromCache(someObjectResult); // ???
});
Run Code Online (Sandbox Code Playgroud)

android okhttp retrofit2 okhttp3

15
推荐指数
2
解决办法
5710
查看次数

如何使用内容类型为x-www-form-urlencoded的okhttp库发布数据?

我使用过这个方法/sf/answers/2222119581/但没有发布数据.

这是我的代码

 OkHttpClient client = new OkHttpClient();
        RequestBody requestBody = new MultipartBuilder()
                .type(MultipartBuilder.FORM)
                .addFormDataPart("rating", "5").addFormDataPart("comment", "Awesome")
                .build();
        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();
        try {

            Response response = client.newCall(request).execute();
            String responseString = response.body().string();
            response.body().close();
        }catch (Exception e) {
            e.printStackTrace();
        }
Run Code Online (Sandbox Code Playgroud)

我尝试了DefaultHttpClient,这似乎有效,但它显示已弃用,所以想到尝试不同的东西.想弄清楚这有什么不对

post android okhttp3

14
推荐指数
1
解决办法
1万
查看次数