Я знаю, что это вне вопроса, который я должен использовать. Очевидно, Retrofit
- рекомендуемый способ. Но я не могу понять, почему Retrofit
ответ занимает около 1 минуты в сети 2G по сравнению с HttpUrlConnection
, который дает ответ примерно через 15 секунд.
Код дооснащения
Call call = surveyApi.getQuestionsOfSurvey();
try {
Response<QuestionResponse> resp= call.execute();
Log.v(TAG, "QuestionUpdateTask: after call.execute");
QuestionList questionList = null;
if(resp.isSuccessful()) {
QuestionResponse response = resp.body();
return new QuestionList(response.getQuestions(), "Questions have been successfully updated.", null);
} else {
return new QuestionList(new ArrayList<Question>(), resp.message(), null);
}
} catch (Exception e) {
e.printStackTrace();
}
Время отклика дооснащения
21: 01: 51,858 D / OkHttp: -> GET https://server_url.com/getJson
21: 02: 34.255 D / OkHttp: <- 200 OK <a href="https://server_url.com/getQuestions" rel="nofollow noreferrer">https://server_url.com/getQuestions (42396ms)
21: 05: 28,161 D / OkHttp: [{"iableableOnQuestion ":" "," repeatableOnQuestion ":" "," unique_answers ": false," likertOptions ": []," answers "}]"
21: 05: 28.406 V / QuestionUpdateTask: QuestionUpdateTask: после call.execute
Код HttpUrlConnection
public void performUrlConnectionRequest() {
Log.v(TAG, "performUrlConnectionRequest");
URL url;
HttpURLConnection urlConnection = null;
try {
url = new URL("https://server_url.com/getQuestions");
Log.v(TAG, "opening connection");
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
int responseCode = urlConnection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) { // connection ok
BufferedReader in = new BufferedReader(new InputStreamReader( urlConnection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
Log.v(TAG, response.toString());
} else {
}
Log.v(TAG, "after result");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
}
}
Время ответа для HttpUrlConnection
20: 58: 12.159 V / QuestionUpdateTask: executeHttpUrlConnectionRequest
20: 58: 44.820 V / QuestionUpdateTask: [{"depenableOnQuestion": "", "repeatableOnQuestion":" " "unique_answers": ложь," LikertOptions ": []," answers "}]"
У меня есть общие коды и время ответа для каждого метода. Как вы можете видеть, что время ответа на запрос Retrofit GET
и его ответ 200 OK
составляет около 50 секунд, но после получения 200 OK
мне нужно было подождать еще 2 или 3 минуты, чтобы использовать фактический JSON. Эти 2 или 3 минуты являются переменными, иногда это занимает 1 минуту или около того. Во-вторых, в HttpUrlConnection
время запроса и ответа составляет около 30 секунд.
Такое поведение невозможно понять в медленных сетях 2G / 3G и т. Д. Как мне лучше справиться с этой ситуацией? Мой ProgressDialog
продолжает отображаться в течение 3 минут, что нежелательно. Какой метод я должен использовать?