На Nexus 6 Android M (v23) вызов HTTP Api с использованием Retrofit ожидает около 5 секунд, прежде чем запрос будет отправлен на сервер. И телефон, и сервер подключены к одному Wi-Fi. Из браузера на другой рабочей станции в том же Wi-Fi вы получаете результаты мгновенно (~ 40-60 мс). Открытие того же API из Android Chrome на том же мобильном телефоне также занимает 5 секунд. В чем может быть проблема с отложенным HTTP-вызовом?
Код: Retrofit2/Okhttp service Factory
public class ApiGenerator {
public static String TAG = ApiGenerator.class.getSimpleName();
public static final String API_BASE_URL = BuildConfig.API_ENDPOINT;
public static final Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.create();
private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder()
.connectTimeout(15, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.readTimeout(15, TimeUnit.SECONDS)
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Response response = chain.proceed(request);
return response;
}
}).addInterceptor(new LoggingInterceptor());
private static Retrofit.Builder builder =
new Retrofit.Builder()
.baseUrl(API_BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJavaCallAdapterFactory.create());
.....
Служба модернизации 2
public interface AuthService {
@GET("/api/v1/auth")
public void authenticate(@Query("token") String token);
@POST("/api/v1/signup")
Call<Object> signup();
}
Вызов службы поддержки –
Observable<Response<SignupV1Response>> observable = service.signupRx(signupReq);
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.unsubscribeOn(Schedulers.io())
.subscribe(new Subscriber<Response<SignupV1Response>>() {
@Override
public void onCompleted() {
...
}
@Override
public void onError(Throwable e) {
...
}
@Override
public void onNext(Response<SignupV1Response> response) {
if (response != null) {
final int statusCode = response.code();
if (response.isSuccess()) {
// Do something
} else {
ResponseBody errorBody = response.errorBody();
// Show error
}
}
}
});