मैं अपने आवेदन में से एक के लिए ओखेट और रेट्रोफिट का उपयोग कर रहा हूं और मेरे पास आरएक्सजेवा का उपयोग करके विभिन्न धागे पर काम करने का कई अनुरोध है। कभी-कभी मुझे किसी भी अनुरोध पर सॉकेटएक्सप्शन मिला और बाद में सर्वर पर कोई अनुरोध नहीं पहुंच सकता।HTTP FAILED का कारण क्या है: java.net.SocketException: सॉकेट बंद है?
उदा। मैं एक नमूना साझा कर सकता हूं।
कोड से कुछ संशोधित स्निपेट साझा कर सकते हैं।
Subscription details = api.details("keyword")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Model>() {
@Override
public void onCompleted() {
Timber.d("onCompleted(): ");
}
@Override
public void onError(Throwable e) {
Timber.e(e, "onError(): ");
}
@Override
public void onNext(final Model details) {
Timber.d("onNext(): ");
}
});
सभी 3 कॉलबैक से कुछ भी नहीं कहा जाता है।
Stackstace:
11-17 15:50:53.991 16595-10314/ D/OkHttp: --> GET API_REQUEST_URL
11-17 15:50:53.991 16595-10314/ D/OkHttp: Host: HOST_NAME
11-17 15:50:53.991 16595-10314/ D/OkHttp: Connection: Keep-Alive
11-17 15:50:53.991 16595-10314/ D/OkHttp: Accept-Encoding: gzip
11-17 15:50:53.991 16595-10314/ D/OkHttp: User-Agent: okhttp/3.4.2
11-17 15:50:53.991 16595-10314/ D/OkHttp: User-Agent: Android-App
11-17 15:50:53.991 16595-10314/ D/OkHttp: --> END GET
11-17 15:50:53.992 16595-10314/ D/OkHttp: <-- HTTP FAILED: java.net.SocketException: Socket closed
अन्य IOException
11-17 16:36:04.274 28523-29137/ D/OkHttp: Host: HOST_NAME
11-17 16:36:04.274 28523-29137/ D/OkHttp: Connection: Keep-Alive
11-17 16:36:04.274 28523-29137/ D/OkHttp: Accept-Encoding: gzip
11-17 16:36:04.274 28523-29137/ D/OkHttp: User-Agent: okhttp/3.4.2
11-17 16:36:04.274 28523-29137/ D/OkHttp: User-Agent: Android-App
11-17 16:36:04.274 28523-29137/ D/OkHttp: --> END GET
11-17 16:36:04.282 28523-29137/ D/OkHttp: <-- HTTP FAILED: java.io.IOException: unexpected end of stream on [email protected]
सदस्यता मैं अक्सर वहाँ ठीक काम कर रहा है लेकिन कभी कभी त्रुटि ऊपर जाता है और फिर कार्य करना बंद कर कॉल करने के लिए कोशिश कर रहा हूँ। अफवर्ड्स कोई अनुरोध सर्वर तक पहुंच सकता है। कुछ भी आवश्यक है, तो पुराना वापस इंटरफ़ेस
@GET("/v1/app_endpoint/{keyword}/")
Observable<Model> details(@Path("keyword") String keyword);
सिर्फ जांच विन्यास के लिए कुछ सहायक तरीकों नीचे से
विधि।
public static Retrofit retrofit() {
return provideRetrofit(provideGson(), provideOkHttpClient());
}
public static Gson provideGson() {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.addSerializationExclusionStrategy(new AnnotationExclusionStrategy());
gsonBuilder.addDeserializationExclusionStrategy(new AnnotationExclusionStrategy());
gsonBuilder.setExclusionStrategies(new ExclusionStrategy() {
@Override
public boolean shouldSkipField(FieldAttributes f) {
return f.getDeclaringClass().equals(RealmObject.class);
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
});
gsonBuilder.registerTypeAdapterFactory(AutoValueGsonTypeAdapterFactory.create());
return gsonBuilder.create();
}
public static OkHttpClient provideOkHttpClient() {
return new OkHttpClient.Builder()
.connectTimeout(30, TimeUnit.SECONDS)
.writeTimeout(600, TimeUnit.SECONDS)
.readTimeout(1, TimeUnit.MINUTES)
.retryOnConnectionFailure(true)
.addNetworkInterceptor(new Interceptor() {
@Override
public okhttp3.Response intercept(Chain chain) throws IOException {
Request newRequest = chain.request().newBuilder()
.addHeader("Content-Type", "application/json")
.addHeader("User-Agent", "Android-App")
.build();
return chain.proceed(newRequest);
}
})
.addNetworkInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
.build();
}
public static Retrofit provideRetrofit(Gson gson, OkHttpClient okHttpClient) {
return new Retrofit.Builder()
.baseUrl(BuildConfig.API_URL)
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJavaCallAdapterFactory.createWithScheduler(Schedulers.io()))
.build();
}
निर्भरता
// Networking
compile 'com.squareup.okhttp3:okhttp:3.4.2'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
क्या आपको कभी इस मुद्दे के लिए कोई समाधान मिला है? मैं okhttp 3.5.0/RxJava 2/जैक्सन का उपयोग कर एकाधिक एसिंक्रोनस http अनुरोधों का उपयोग कर समान यादृच्छिक त्रुटि देख रहा हूं। –
मैं कह सकता हूं कि आपको बस अपने सर्वर कनेक्ट/पढ़ने/लिखने के समय के आधार पर टाइमआउट कॉन्फ़िगरेशन के साथ खेलने की आवश्यकता है। –
जब मैं कनेक्शन सेट करता हूं, पढ़ता हूं और लिखता हूं, तो मुझे एक ही समस्या है, इसलिए, मुझे लगता है कि लाइब्रेरी द्वारा सॉकेटएक्सप्शन को संभाला जा रहा है, लेकिन अजीब चीज यह है कि यह किसी भी त्रुटि, पूर्ण, या अगली विधियों तक कभी नहीं पहुंचती है और मेरे मामले में, पर्यवेक्षक कभी खत्म नहीं होता ... किसी भी मदद की सराहना की जाएगी। –