Articles of okhttp3

需要改进2 HTTP方法注释(例如,@ GET,@ POST等)

我的Retrofit配置出了什么问题? 我在使用OkHttpClient添加基本身份validation时出现此错误,但是当我使用没有Interceptor的默认客户端时,它正在运行。 或者我的Gradle Dependencies有什么问题吗? E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.IllegalArgumentException : HTTP method annotation is required (eg, @GET, @POST, etc.). for method APIService.getRegAccrDetails at retrofit.Utils.methodError(Utils.java:177) at retrofit.Utils.methodError(Utils.java:167) at retrofit.RequestFactoryParser.parseMethodAnnotations(RequestFactoryParser.java:135) at retrofit.RequestFactoryParser.parse(RequestFactoryParser.java:59) at retrofit.MethodHandler.create(MethodHandler.java:30) at retrofit.Retrofit.loadMethodHandler(Retrofit.java:151) at retrofit.Retrofit$1.invoke(Retrofit.java:132) at $Proxy0.getRegAccrDetails(Native Method) at alvin.test.myapplication.MainActivity.liferayAccess(MainActivity.java:136) at alvin.test.myapplication.MainActivity.access$000(MainActivity.java:28) at alvin.test.myapplication.MainActivity$1.onClick(MainActivity.java:49) at android.view.View.performClick(View.java:3511) at android.view.View$PerformClick.run(View.java:14105) at android.os.Handler.handleCallback(Handler.java:605) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) […]

使用retrofit2和OkHttp3时出现此错误。 无法解析主机“”:没有与主机名关联的地址

我正在使用改造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() […]

OkHttpClient是否具有最大重试次数

我正在为OkHttpClient设置重试连接失败选项。 client = new OkHttpClient(); client.setRetryOnConnectionFailure(true); 我想知道它会继续尝试多少次。 查看源代码,我没有看到任何最大限​​制。 如何配置客户端在几次尝试后停止尝试?

无法在okhttp:3.0.0-RC1中解析MultipartBuilder

我已经使用了okhttp ,它可以正常使用以下依赖: compile ‘com.squareup.okhttp:okhttp:2.3.0’ 最近我更新了: compile ‘com.squareup.okhttp3:okhttp:3.0.0-RC1’ 它显示错误,如MultipartBuilder无法解决。 我正在使用我的上传文件上传答案上传图片。 有没有办法用okhttp:3.0.0-RC1实现相同的东西okhttp:3.0.0-RC1 ?

如何在Android中的OKHTTP 3.x中动态(或循环)发送post参数?

我正在使用OKHTTP 3.x版本。 我想发布多个参数,并希望在循环中添加参数。 我知道在2.x版中,我可以使用FormEncodingBuilder并在循环中添加params,然后从中创建一个请求体。 但在3.x中,该类已被删除。 这是我目前的代码: RequestBody formBody = new FormBody.Builder() .add(“Param1”, value1) .add(“Param2”, value2) .build(); Request request = new Request.Builder() .url(“url”) .post(formBody) .build(); 现在我想添加5个参数,但是在循环中,即通过在循环中构建formbody来创建请求体。 就像我上面写的,我知道如何在OKHTTP版本2.x中执行它,但我使用的是版本3.x. 任何帮助或指导表示赞赏。 提前致谢

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; } 我将应用程序上传到Playstore,从过去1年开始,它就运行良好。 但从最近1周开始,它给出了以下问题,我使用了版本com.squareup.okhttp的OkHttp:okhttp:2.7.4 java.security.cert.CertPathValidatorException: Trust anchor for […]

java.net.SocketTimeoutException:timeout

使用OkHttp库,应用程序面临以下SocketTimeoutException问题。 如果请求大小较小,那么它工作正常(小于1MB)。 我在10秒内收到此exception,即使我的套接字超时( readTimeout )值更高。 它始终无法满足请求(大小为1.8MB)。 当我用HttpUrlConnection执行请求时它工作正常。 什么可能是失败的原因? 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: java.net.SocketTimeoutException: timeout 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okio.Okio$3.newTimeoutException(Okio.java:207) 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okio.AsyncTimeout.exit(AsyncTimeout.java:261) 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okio.AsyncTimeout$1.write(AsyncTimeout.java:158) 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:176) 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okio.RealBufferedSink.write(RealBufferedSink.java:46) 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okhttp3.internal.http.Http1xStream$FixedLengthSink.write(Http1xStream.java:286) 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at […]

OkHttpClient有一个最大重试计数

我正在为OkHttpClient设置连接失败的重试选项。 client = new OkHttpClient(); client.setRetryOnConnectionFailure(true); 我想知道它会继续尝试多less次。 看看源代码,我没有看到任何最大限​​制。 如何configuration客户端在几次尝试后停止尝试?

Android java.security.cert.CertPathValidatorException:找不到证书path的信任锚点

有三个主机,一个Android应用程序进行身份validation和授权。 最终主机是REST API。 这是第一次使用Oauthauthentication和授权过程,没有问题。 但是,如果用户在login后杀死应用程序 ,并访问REST API提供的服务,然后再次打开应用程序,则会出现此问题。 在这个时候authentication和授权过程不会发生,只有REST API。 它导致java.security.cert.CertPathValidatorException 但它在第一次使用(login,然后使用应用程序)期间工作。 有人可以解释这个例外背后的情况,什么是错的应用程序。 根据这个答案,如果authentication例外被忽略, 这是有效的 。 SSLSocketFactory sslSocketFactory = null; try { TrustManagerFactory tmf = TrustManagerFactory.getInstance( TrustManagerFactory.getDefaultAlgorithm()); // Initialise the TMF as you normally would, for example: try { tmf.init((KeyStore)null); } catch(KeyStoreException e) { e.printStackTrace(); } TrustManager[] trustManagers = tmf.getTrustManagers(); final X509TrustManager origTrustmanager = (X509TrustManager)trustManagers[0]; // […]

使用okHttp3上传dynamic文件数量

如何使用OkHttp v3pipe理dynamicfile upload,我已经使用compile 'com.squareup.okhttp:okhttp:2.6.0'旧版本实现了compile 'com.squareup.okhttp:okhttp:2.6.0' 类Form和Multipart有一些变化,现在build模。 他们用更强大的FormBody和FormBody.Builder组合replace了不透明的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 […]