2016-09-19 14 views
5

मैं अपने एंड्रॉइड ऐप में रेट्रोफिट का उपयोग करके एक आरामदायक क्लाइंट का निर्माण कर रहा हूं, हालांकि मैं अपने webservice से डेटा को पुनः प्राप्त करने का प्रयास करते समय अपवाद के साथ संघर्ष कर रहा हूं, पहला कॉल काम अपवाद के बिना काम करता है लेकिन मैं पैराम्स को बदलता हूं और पुनः प्रयास करता हूं नए डेटा प्राप्त करने के लिए मैं अपवादसॉकेटटाइमआउट एक्सेप्शन एंड्रॉइड रेट्रोफिट

bellow उल्लेख मिलता है यह मेरी सेवा जनरेटर वर्ग

public class ServiceGenerator { 

public static final String API_BASE_URL = "http://192.168.43.109:9988/Serv/"; 

private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); 



private static Retrofit.Builder builder = 
     new Retrofit.Builder() 
       .baseUrl(API_BASE_URL) 
       .addConverterFactory(GsonConverterFactory.create()); 

public static <S> S createService(Class<S> serviceClass) { 
    Retrofit retrofit = builder.client(httpClient.build()).build(); 
    return retrofit.create(serviceClass); 
}} 

है और यह स्टैक ट्रेस मैं मिलता है:

W/System.err: java.net.SocketTimeoutException 
W/System.err:  at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488) 
W/System.err:  at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:37) 
W/System.err:  at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:237) 
W/System.err:  at okio.Okio$2.read(Okio.java:140) 
W/System.err:  at okio.AsyncTimeout$2.read(AsyncTimeout.java:238) 
W/System.err:  at okio.RealBufferedSource.indexOf(RealBufferedSource.java:325) 
W/System.err:  at okio.RealBufferedSource.indexOf(RealBufferedSource.java:314) 
W/System.err:  at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:210) 
W/System.err:  at okhttp3.internal.http.Http1xStream.readResponse(Http1xStream.java:184) 
W/System.err:  at okhttp3.internal.http.Http1xStream.readResponseHeaders(Http1xStream.java:125) 
W/System.err:  at okhttp3.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:775) 
W/System.err:  at okhttp3.internal.http.HttpEngine.access$200(HttpEngine.java:86) 
W/System.err:  at okhttp3.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:760) 
W/System.err:  at okhttp3.internal.http.HttpEngine.readResponse(HttpEngine.java:613) 
W/System.err:  at okhttp3.RealCall.getResponse(RealCall.java:244) 
W/System.err:  at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:201) 
W/System.err:  at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:163) 
W/System.err:  at okhttp3.RealCall.execute(RealCall.java:57) 
W/System.err:  at retrofit2.OkHttpCall.execute(OkHttpCall.java:174) 
W/System.err:  at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall.execute(ExecutorCallAdapterFactory.java:89) 
W/System.err:  at com.example.admin.theapp.ListPersonne$GetPersonnesAsyncTask.doInBackground(ListPersonne.java:418) 
W/System.err:  at com.example.admin.theapp.ListPersonne$GetPersonnesAsyncTask.doInBackground(ListPersonne.java:409) 
W/System.err:  at android.os.AsyncTask$2.call(AsyncTask.java:288) 
W/System.err:  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
W/System.err:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
W/System.err:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
W/System.err:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
W/System.err:  at java.lang.Thread.run(Thread.java:818) 
W/System.err: java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference 
W/System.err:  at com.example.admin.theapp.ListPersonne.onCreate(ListPersonne.java:143) 
W/System.err:  at android.app.Activity.performCreate(Activity.java:6374) 
W/System.err:  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
W/System.err:  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2743) 
W/System.err:  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2855) 
W/System.err:  at android.app.ActivityThread.access$900(ActivityThread.java:181) 
W/System.err:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1474) 
W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:102) 
W/System.err:  at android.os.Looper.loop(Looper.java:145) 
W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:6117) 
W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
W/System.err:  at java.lang.reflect.Method.invoke(Method.java:372) 
W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 

उत्तर

6
private OkHttpClient getClient() { 
    OkHttpClient client = new OkHttpClient.Builder() 
    .connectTimeout(5, TimeUnit.MINUTES) 
    .readTimeout(5, TimeUnit.MINUTES) 
    .build(); 
    return client; 
} 
+2

क्या आप कृपया मेरे मुद्दे के बारे में अधिक जानकारी प्रदान कर सकते हैं और आपके उत्तर के बारे में कुछ स्पष्टीकरण दे सकते हैं क्योंकि मैं समस्या को समझने के बिना अतीत की प्रतिलिपि बनाना नहीं चाहता हूं – DevRj

+1

यह समय-समय पर समस्या है यदि सेवा को प्रतिक्रिया प्राप्त करने में अधिक समय लगता है यह sockettimeoutException मिल जाएगा तो हम connectiontimeout देने के लिए की जरूरत है, readTimeout – Rudresh

+0

youuu का शुक्र है, यह वास्तव में समस्या – DevRj

0

आप देख सकते हैं, त्रुटि java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference है। यही कारण है कि संभव है कि आप लोगों के एक रिक्त सूची पुनरावृति जब सर्वर प्रतिक्रिया doesen't या अन्य त्रुटि फेंक करने की कोशिश हो सकती है। अपने कॉलबैक श्रोता या प्रत्यक्ष चेक (यदि आप RxJava उपयोग कर रहे हैं)।

+0

वास्तव में, लेकिन मुख्य मुद्दा यह है कि सेवा कुछ नहीं हो जाता है जब कॉल होता है, इसलिए यह SocketTimeoutException की वजह से है और मैं सच में पता नहीं कैसे हल समस्या – DevRj

+0

चेक यूआरएल, शायद आप गलत पैरामीटर और सर्वर आप कुछ भी नहीं देता है या सर्वर में कोई समस्या है। सर्वर से अनुरोध और प्रतिक्रिया देखने के लिए आप फिडलर का उपयोग कर सकते हैं। आप अनुरोध के लिए सुनने के लिए आप फोन का उपयोग कर सकते हैं, लेकिन अगर सर्वर https है, तो आप ऐसा नहीं कर सकते, सिर्फ इतना है कि यूआरएल फ़िडलर में कहते हैं। –

संबंधित मुद्दे