2017-02-01 6 views
1

Я успешно реализовал Retrofit 2 в своем проекте, и все работает должным образом. Но как только интернет нет, приложение отправляет несколько запросов для отказавшего запроса. Это создает стек неудачных запросов, которые продолжают генерировать и приводят к повеснению приложения.Retrofit продолжает повторять попытку, когда интернет не подключен

Я не понимаю причину такого поведения.

02-01 16:16:08.812 27970-28054/? D/OkHttp: --> GET https://api.newsapi.in/v1/stories/category/india?nobody=true&skip=0&limit=10 http/1.1 
02-01 16:16:08.812 27970-28054/? D/OkHttp: --> END GET 
02-01 16:16:08.812 27970-28054/? D/OkHttp: <-- HTTP FAILED: java.net.UnknownHostException: Unable to resolve host "api.newsapi.in": No address associated with hostname 
02-01 16:16:08.912 27970-28054/? D/OkHttp: --> GET https://api.newsapi.in/v1/stories/category/international?nobody=true&skip=0&limit=10 http/1.1 
02-01 16:16:08.912 27970-28054/? D/OkHttp: --> END GET 
02-01 16:16:08.912 27970-28054/? D/OkHttp: <-- HTTP FAILED: java.net.UnknownHostException: Unable to resolve host "api.newsapi.in": No address associated with hostname 
02-01 16:16:08.922 27970-27970/? E/NewsListFragment: java.net.UnknownHostException: Unable to resolve host "api.newsapi.in": No address associated with hostname 
02-01 16:16:08.922 27970-27970/? E/NewsListFragment: java.net.UnknownHostException: Unable to resolve host "api.newsapi.in": No address associated with hostname 
02-01 16:16:08.942 27970-27979/? I/dalvikvm: Jit: resizing JitTable from 4096 to 8192 
02-01 16:16:09.042 27970-28054/? D/OkHttp: --> GET https://api.newsapi.in/v1/stories/category/india?nobody=true&skip=0&limit=10 http/1.1 
02-01 16:16:09.042 27970-28054/? D/OkHttp: --> END GET 
02-01 16:16:09.042 27970-28054/? D/OkHttp: <-- HTTP FAILED: java.net.UnknownHostException: Unable to resolve host "api.newsapi.in": No address associated with hostname 
02-01 16:16:09.142 27970-28054/? D/OkHttp: --> GET https://api.newsapi.in/v1/stories/category/international?nobody=true&skip=0&limit=10 http/1.1 
02-01 16:16:09.142 27970-28054/? D/OkHttp: --> END GET 
02-01 16:16:09.142 27970-28054/? D/OkHttp: <-- HTTP FAILED: java.net.UnknownHostException: Unable to resolve host "api.newsapi.in": No address associated with hostname 
02-01 16:16:09.152 27970-27970/? E/NewsListFragment: java.net.UnknownHostException: Unable to resolve host "api.newsapi.in": No address associated with hostname 
02-01 16:16:09.162 27970-27970/? E/NewsListFragment: java.net.UnknownHostException: Unable to resolve host "api.newsapi.in": No address associated with hostname 
02-01 16:16:09.282 27970-28054/? D/OkHttp: --> GET https://api.newsapi.in/v1/stories/category/india?nobody=true&skip=0&limit=10 http/1.1 
02-01 16:16:09.282 27970-28054/? D/OkHttp: --> END GET 
02-01 16:16:09.282 27970-28054/? D/OkHttp: <-- HTTP FAILED: java.net.UnknownHostException: Unable to resolve host "api.newsapi.in": No address associated with hostname 
02-01 16:16:09.402 27970-28054/? D/OkHttp: --> GET https://api.newsapi.in/v1/stories/category/international?nobody=true&skip=0&limit=10 http/1.1 
02-01 16:16:09.402 27970-28054/? D/OkHttp: --> END GET 
02-01 16:16:09.402 27970-28054/? D/OkHttp: <-- HTTP FAILED: java.net.UnknownHostException: Unable to resolve host "api.newsapi.in": No address associated with hostname 
02-01 16:16:09.412 27970-27970/? E/NewsListFragment: java.net.UnknownHostException: Unable to resolve host "api.newsapi.in": No address associated with hostname 
02-01 16:16:09.432 27970-27970/? D/dalvikvm: GC_FOR_ALLOC freed 2592K, 13% free 21331K/24320K, paused 27ms, total 27ms 
02-01 16:16:09.442 27970-27970/? E/NewsListFragment: java.net.UnknownHostException: Unable to resolve host "api.newsapi.in": No address associated with hostname 
02-01 16:16:09.552 27970-28054/? D/OkHttp: --> GET https://api.newsapi.in/v1/stories/category/india?nobody=true&skip=0&limit=10 http/1.1 
02-01 16:16:09.552 27970-28054/? D/OkHttp: --> END GET 
02-01 16:16:09.552 27970-28054/? D/OkHttp: <-- HTTP FAILED: java.net.UnknownHostException: Unable to resolve host "api.newsapi.in": No address associated with hostname 
02-01 16:16:09.662 27970-28054/? D/OkHttp: --> GET https://api.newsapi.in/v1/stories/category/international?nobody=true&skip=0&limit=10 http/1.1 
02-01 16:16:09.662 27970-28054/? D/OkHttp: --> END GET 
02-01 16:16:09.662 27970-28054/? D/OkHttp: <-- HTTP FAILED: java.net.UnknownHostException: Unable to resolve host "api.newsapi.in": No address associated with hostname 
02-01 16:16:09.662 27970-27970/? E/NewsListFragment: java.net.UnknownHostException: Unable to resolve host "api.newsapi.in": No address associated with hostname 
02-01 16:16:09.672 27970-27970/? E/NewsListFragment: java.net.UnknownHostException: Unable to resolve host "api.newsapi.in": No address associated with hostname 
+0

Не думаю, что дооснащение повторное. В основном вы запрашиваете снова и снова – Blackbelt

ответ

3

Модернизация не выполняется. Однако у OkHttp есть такая возможность. Посмотрите на this article. Он включен по умолчанию.

Вы можете отключить его, позвонив по телефону retryOnConnectionFailure по телефону OkHttpClient.Builder.

Это изменение присутствует, так как Retrofit 2.1.0 (OkHttp 3.3.0).

0

Не запрашивать снова и снова, когда мобильный телефон не подключен к Интернету.

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

public static boolean hasNetworkConnection(Context context) { 
    if (context == null) return false; 
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE); 
    //Was causing crash due to required permission for access network state 
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
    if (activeNetwork != null) { 
     if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) 
      return activeNetwork.isConnected(); 
     else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) 
      return activeNetwork.isConnected(); 
    } 
    return false; 
} 
+0

Какое значение мы должны предоставить для 'int type' в параметре isConnected? –

Смежные вопросы