0

В приложени в первом активити идет хттп запрос на сервер. Использую Okhttp3 для запроса. Таймаут у запроса 10минут на всякий случай если интернет тихий. Проблема в том что при подключении быстрого вайфая он все идеально загружает а вот на мобильных данных (3G) происходит IOexception. Не могу понять изза чего. Может для мобильных данных нужно какое нибудь разрешения кроме стандартных? при этом на одном телефон работает идиально на другом плохо. При этом если запрос должен длится десять минут он длится 30 секунд максимум это код запроса:

import android.content.Context;
import android.os.AsyncTask;
import okhttp3.*;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

public class AsyncQuery extends AsyncTask<String, String, String> {

    private Context  context;
    private Callback callBack;
    private String[] data;
    private String[] par;
    private String[] key;

    AsyncQuery(Context c, String[] p, String[] v, String[] k, Callback back) {
        context = c;
        callBack = back;
        data = v;
        par = p;
        key = k;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... params) {
        OkHttpClient client = new OkHttpClient.Builder()
                .readTimeout(10, TimeUnit.MINUTES)
                .connectTimeout(10, TimeUnit.MINUTES)
                .writeTimeout(10, TimeUnit.MINUTES)
                .build();

        FormBody.Builder builder = new FormBody.Builder()
                .add("code", par[1]);


        if (data[0] != null) {
            for (int i = 0; i < data.length; i++) {
                builder.add(key[i], data[i]);
            }
        }

        RequestBody formBody = builder.build();
        Request request = new Request.Builder()
                .url(par[0])
                .post(formBody)
                .build();

        try {
            Response response = client.newCall(request).execute();

            String serverAnswer = response.body().string();
            return serverAnswer;

        } catch (IOException e) {
            e.printStackTrace();
            return "1";
        }
    }

    @Override
    protected void onPostExecute(String rs) {
        super.onPostExecute(rs);
        switch (rs) {
            case "1":
                callBack.onReqFail(false, "err01-");
                break;
            default:
                callBack.onSuccess(context, rs);
        }
    }
}
rjhdby
  • 13,850
  • нет, специального разрешения не нужно. Покажите код, в котором происходит ошибка и stacktrace – rjhdby Dec 20 '17 at 09:28
  • @rjhdby изменил – Fariz Mamedow Dec 20 '17 at 09:36
  • @rjhdby изза чего могла вылазть IOexception? – Fariz Mamedow Dec 20 '17 at 09:39
  • stacktrace покажите – rjhdby Dec 20 '17 at 09:40
  • @rjhdby как это покозать? Я две недели только пишу под андр и не встречал такого. Тестирую лишь на самом телефоне изза того что с эмулятором проблемы – Fariz Mamedow Dec 20 '17 at 09:42
  • Ну вот вы откуда-то узнали, что у вас именно IOexception? Скорее всего увидели в консоли что-то такое http://jeremyfranklin-ross.com/wp-content/uploads/2013/11/javastacktraceconsole.jpg - вот это и есть stack trace – rjhdby Dec 20 '17 at 09:58
  • @rjhdby нет просто выпалняется callBack.onReqFail(false, "err01-"); в
    protected void onPostExecute(String rs)
    – Fariz Mamedow Dec 20 '17 at 09:59
  • https://ru.stackoverflow.com/questions/510755/Что-такое-stack-trace-и-как-с-его-помощью-находить-ошибки-при-разработке-прилож/510756#510756 – project_guru Dec 20 '17 at 10:04
  • вот эта команда e.printStackTrace(); перед return "1"; печатает в консоль трассировку стека вызова на момент возникновения ошибки. Посмотрите в LogCat студии, он должен туда печататься – rjhdby Dec 20 '17 at 10:06
  • в студии внизу есть вкладочка Logcat там весь лог с ошибками – Sviat Volkov Dec 20 '17 at 10:09
  • @rjhdby Ниче не выходит при этом и приложения работает но сегодня пробавал на других двух телефонов у них тогда сробатовает IOException. Че то не так на одном работает на другом нет – Fariz Mamedow Dec 20 '17 at 10:15
  • @rjhdby может изза тихого интернето но он же должен ждать свои десять минут а он за 30сек выкидавает onReqFail(). Даже не знаю изза чего – Fariz Mamedow Dec 20 '17 at 10:21

0 Answers0