1. ホーム
  2. android

[解決済み] Android版Retrofitで「インターネットに接続できません」と表示されたときの対処法

2022-06-26 05:59:48

質問

インターネットに接続できない状況に対応したい。普段は実行するのですが

ConnectivityManager cm =
    (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
                  activeNetwork.isConnectedOrConnecting();

から ここで からの) リクエストをネットワークに送信する前に、インターネットに接続されていない場合はユーザーに通知します。

私が見たところ、Retrofitはこの状況を特に扱いません。インターネットに接続されていない場合、私は単に RetrofitError と表示され、その理由としてタイムアウトが表示されます。

このようなチェックをRetrofitですべてのHTTPリクエストに組み込みたい場合、どのようにすればよいのでしょうか。あるいは全くしないほうがいいのでしょうか。

ありがとうございます。

アレックス

どのように解決するのですか?

私が最終的に行ったのは、リクエストを実行する前に接続性をチェックし、例外を投げるカスタムRetrofitクライアントを作成することです。

public class ConnectivityAwareUrlClient implements Client {

    Logger log = LoggerFactory.getLogger(ConnectivityAwareUrlClient.class);

    public ConnectivityAwareUrlClient(Client wrappedClient, NetworkConnectivityManager ncm) {
        this.wrappedClient = wrappedClient;
        this.ncm = ncm;
    }

    Client wrappedClient;
    private NetworkConnectivityManager ncm;

    @Override
    public Response execute(Request request) throws IOException {
        if (!ncm.isConnected()) {
            log.debug("No connectivity %s ", request);
            throw new NoConnectivityException("No connectivity");
        }
        return wrappedClient.execute(request);
    }
}

を設定する際に使用します。 RestAdapter

RestAdapter.Builder().setEndpoint(serverHost)
                     .setClient(new ConnectivityAwareUrlClient(new OkHttpClient(), ...))