How should I handle “No internet connection” with Retrofit on Android

前端 未结 8 924
一个人的身影
一个人的身影 2020-12-02 03:55

I\'d like to handle situations when there is no internet connection. Usually I\'d run:

ConnectivityManager cm =
    (ConnectivityManager)context.getSystemSer         


        
8条回答
  •  日久生厌
    2020-12-02 04:50

    What I ended up doing is creating a custom Retrofit client that checks for connectivity before executing a request and throws an exception.

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

    and then use it when configuring RestAdapter

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

提交回复
热议问题