koush / ion

Android Asynchronous Networking and Image Loading
Other
6.3k stars 1.04k forks source link

How to set default timeout? #592

Open HarlonWang opened 9 years ago

HarlonWang commented 9 years ago

I want to change default timeout ,so I write code like this #31

public class Application extends Application{

    @Override
    public void onCreate() {
        super.onCreate();

        setupIon();
    }

    private void setupIon() {
        final AsyncHttpRequestFactory current = Ion.getDefault(this).configure().getAsyncHttpRequestFactory();
        Ion.getDefault(this).configure().setAsyncHttpRequestFactory(new AsyncHttpRequestFactory() {
            public AsyncHttpRequest createAsyncHttpRequest(Uri uri, String method, Headers headers) {
                AsyncHttpRequest ret = current.createAsyncHttpRequest(uri, method, headers);
                ret.setHeader("test","test");
                ret.setTimeout(3000);
                return ret;
            }
        });
    }
}

but ,When I use it in other places

    Ion.with(this)
                .load(APIs.apiCategory)
                .setLogging("Ion", Log.VERBOSE)
                .as(new TypeToken<DataResult<Category>>() {
                })...

the Ion still use default timeout 30000.

if I set this ,

    Ion.with(this)
                .load(APIs.apiCategory)
                .setLogging("Ion", Log.VERBOSE)
                .setTimeout(3000)
                .as(new TypeToken<DataResult<Category>>() {
                })...

it works.

I view IonRequestBuilder code

    int timeoutMilliseconds = AsyncHttpRequest.DEFAULT_TIMEOUT;
    @Override
    public IonRequestBuilder setTimeout(int timeoutMilliseconds) {
        this.timeoutMilliseconds = timeoutMilliseconds;
        return this;
    }
rnevet commented 7 years ago

This didn't work for me either, my current solution is using middleware:

        Ion.getDefault(this).getHttpClient().insertMiddleware(new AsyncHttpClientMiddleware() {
            @Override
            public void onRequest(OnRequestData data) {
                // force a minimum timeout on Ion requests to DEFAULT_TIMEOUT.
                if(data != null && data.request != null && data.request.getTimeout() <= Config.DEFAULT_TIMEOUT) {
                    data.request.setTimeout(Config.DEFAULT_TIMEOUT);
                }
            }

            @Override
            public Cancellable getSocket(GetSocketData data) {
                return null;
            }

            @Override
            public boolean exchangeHeaders(OnExchangeHeaderData data) {
                return false;
            }

            @Override
            public void onRequestSent(OnRequestSentData data) {}

            @Override
            public void onHeadersReceived(OnHeadersReceivedDataOnRequestSentData data) {}

            @Override
            public void onBodyDecoder(OnBodyDataOnRequestSentData data) {}

            @Override
            public void onResponseComplete(OnResponseCompleteDataOnRequestSentData data) {}
        });