2016-09-19 27 views
5

Tôi đang xây dựng một khách hàng yên tĩnh sử dụng trang bị thêm trong ứng dụng Android của mình, tuy nhiên tôi đang đấu tranh với một ngoại lệ trong khi cố gắng truy xuất dữ liệu từ dịch vụ web của mình, cuộc gọi đầu tiên hoạt động mà không có ngoại lệ nhưng tôi thay đổi thông số và thử lại để có được dữ liệu mới tôi nhận được ngoại trừ đề cập dưới đâySocketTimeoutException android retrofit

đây là dịch vụ của tôi phát lớp

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); 
}} 

và đây là stack trace tôi nhận được:

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) 

Trả lời

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

bạn có thể vui lòng cung cấp thêm chi tiết về vấn đề tôi đang gặp phải và một số giải thích rõ ràng về câu trả lời của bạn vì tôi không muốn sao chép quá khứ mà không hiểu được sự cố – DevRj

+1

Đó là vấn đề thời gian chờ nếu dịch vụ mất nhiều thời gian hơn để nhận phản hồi nó sẽ nhận được sockettimeoutException vì vậy chúng tôi cần phải cung cấp cho ConnectionTimeOut, readTimeout – Rudresh

+0

thank youuu, điều này thực sự giải quyết được vấn đề – DevRj

0

Như bạn có thể thấy, lỗi là java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference. Điều đó có thể xảy ra là bạn cố gắng lặp lại một danh sách null của người khi máy chủ không đáp ứng hoặc ném lỗi khác. Kiểm tra người nghe gọi lại hoặc có thể quan sát (nếu bạn đang sử dụng RxJava).

+0

thực sự nhưng vấn đề chính là dịch vụ không có gì khi cuộc gọi xảy ra, vì vậy đó là do SocketTimeoutException và tôi thực sự không biết làm thế nào giải quyết vấn đề – DevRj

+0

Kiểm tra url, có lẽ bạn có thông số sai và máy chủ cung cấp cho bạn không có gì hoặc máy chủ có sự cố. Bạn có thể sử dụng Fiddler để xem yêu cầu và phản hồi từ máy chủ. Bạn có thể sử dụng điện thoại của bạn để nghe yêu cầu, nhưng nếu máy chủ là https, bạn không thể làm điều đó, chỉ cần gọi trong Fiddler url đó. –

Các vấn đề liên quan