Модификация SocketTimeoutException для Android

Я создаю спокойный клиент, используя модификацию в своем приложении для Android, однако я борюсь с исключением при попытке получить данные из моего веб-сервиса, первый вызов работает без исключений, но я меняю параметры и повторяю попытку получить новые данные, я получаю исключение, упомянутое ниже

это мой класс генератора сервисов

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)

person DevRj    schedule 19.09.2016    source источник


Ответы (2)


Как видите, ошибка java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference. Вероятно, вы пытаетесь перейти к нулевому списку лиц, когда сервер не отвечает или выдает другую ошибку. Проверьте прослушиватель обратного вызова или Observable (если вы используете RxJava).

person Florescu Cătălin    schedule 19.09.2016
comment
действительно, но основная проблема заключается в том, что служба ничего не получает, когда происходит вызов, поэтому это связано с SocketTimeoutException, и я действительно не знаю, как решить проблему. - person DevRj; 19.09.2016
comment
Проверьте URL-адрес, возможно, у вас неправильные параметры, и сервер ничего не дает или у сервера проблемы. Вы можете использовать Fiddler, чтобы увидеть запрос и ответ от сервера. Вы можете использовать свой телефон для прослушивания запросов, но если сервер https, вы не можете этого сделать, просто позвоните в Fiddler по этому URL-адресу. - person Florescu Cătălin; 19.09.2016

person    schedule
comment
не могли бы вы предоставить более подробную информацию о проблеме, с которой я столкнулся, и некоторые пояснения к вашему ответу, потому что я не хочу копировать прошлое, не понимая проблему - person DevRj; 19.09.2016
comment
Это проблема тайм-аута, если службе требуется больше времени для получения ответа, тогда она получит исключение sockettimeoutException, поэтому нам нужно указать ConnectionTimeOut, readTimeout - person Rudresh; 19.09.2016
comment
Не используйте это, если вы не хотите, чтобы ваш пользователь ждал 5 минут, а затем получил сообщение об ошибке. Что делать, если сервер отключен, и вы его не проверяете, а просто начинаете загрузку? А потом ждать сообщения об ошибке 5 минут? - person hocikto; 09.06.2017
comment
@Rudresh Я не использовал okhttp с Retrofit. Я просто использовал Retrofit2 в своем приложении для Android. Я тоже получил ту же ошибку-java.net.SocketTimeoutException: timeout. Можете ли вы сказать что-нибудь - person Divya Galla; 24.03.2018