2017-02-01 7 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

私はretrofitが再試行しているとは思わない。ほとんどあなたは何度も何度もリクエストしています – Blackbelt

答えて

3

Retrofitは再試行していません。しかし、OkHttpにはこのような機能があります。 this articleを見てください。これはデフォルトで有効になっています。

OkHttpClient.Builderに電話すると無効にすることができます。

この変更はRetrofit 2.1.0(OkHttp 3.3.0)以来存在します。

0

モバイルがインターネットに接続されていない場合、何度もリクエストしないでください。

あなたがインターネットリクエストに電話する前にあなたがチェックするところであなた自身のutilクラスで一般的なメソッドを作成して、モバイルがインターネットに接続されているかどうかを確認してからリクエストを送信します。以下はモバイルがインターネットに接続されているかどうかを確認する一般的な方法です。

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

isConnectedパラメータの 'int type'に与えるべき値は? –

関連する問題