Я не уверен, как даже поставить хорошее название для этого вопроса.
У меня есть следующий класс в моем приложении для Android:
class Translator {
public Translator() {
}
public String bingTranslate(String text) throws IOException {
String response;
String textEncoded= URLEncoder.encode(text, "utf-8");
String url = "https://www.bing.com/tdetect";
URL obj = new URL(url);
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
con.setRequestMethod("POST");
//con.setRequestProperty("User-Agent", USER_AGENT);
con.setRequestProperty("Accept-Language", "UTF-8");
con.setDoOutput(true);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(con.getOutputStream());
outputStreamWriter.write("text="+textEncoded);
outputStreamWriter.flush();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
response=in.readLine();
in.close();
con.disconnect();
return response;
}
}
И я вызываю егокак это:
detected = new Translator().bingTranslate(text.substring(0, Math.min(text.length(), 100)));
Это работает абсолютно нормально, однако после того, как моя служба работает в течение длительного времени (например, день или около того), URL-адрес не удается подключиться, из-за чего мне не удалось подключиться.Принудительная остановка службы и ее перезапуск заставляет всю работу снова работать.
Мой сервис расширяет NotificationListenerService, поэтому он всегда работает и пытается использовать Bing для определения языка некоторых уведомлений.
Строка detect
является локальной переменной, и на класс Translator
больше нигде нет ссылок.Сначала я подумал, что на него могут как-то ссылаться, потому что я использовал класс Translator в качестве поля.Но даже после перемещения Переводчика на локальный вызов проблема все еще всплывает.
Что я заметил при сбое соединения, выбрасывает URL и ошибка, с которой он не смог соединиться: https://www.bing.com/204.79.197.200:443
, что на самом деле неСтрока URL-адреса, которую я использовал для совершения звонка.
Я упускаю очевидное или это потенциальная ошибка в Android?
В качестве вопроса сноски можно найти альтернативу для создания httpвызов?Я посмотрел на Volley , но это работает с обратными вызовами, и я не слишком заинтересован, чтобы вносить изменения во все мое приложение, чтобы приспособиться к этому.
ОБНОВЛЕНИЕ
Я изменил код и переключился на Volley , который, кажется, работает нормально даже через 3 дня, пока что все хорошо, но остается вопрос, почему простое соединение Https не удается через некоторое время?Я просто не мог понять это ...