Я пишу приложение для Android, которое подключается к веб-сайту и получает результаты поиска в форме JSON. Эта функция выполняется в AsyncTask, который настроен как отдельный поток от пользовательского интерфейса. Мне нужно разобраться со случаем, когда соединение прервано / отсутствует / слишком скрыто. Мне нужно обработать этот случай, чтобы отобразить AlertDialog для пользователя, давая ему понять, что соединение плохое. Я видел сообщения, предлагающие установить параметр времени ожидания для URLConnection, но я сейчас не использую URLConnection.
Прямо сейчас, функция работает безупречно, когда у меня есть подключение для передачи данных, но не так, когда нет подключения. Когда я запускаю эмулятор и отключаю интернет-соединение моего компьютера, при запуске функции появляется сообщение «Force Close» и выдается исключение UnknownHostException. Я ловлю это исключение, но мое приложение все еще падает.
Мне также нужно обработать случай, когда миниатюра не может быть найдена, что приводит к исключению FileNotFoundException.
Пожалуйста, посоветуйте мне, что мне делать. Спасибо.
@Override
protected HashMap<String, String> doInBackground(Object... params) {
InputStream imageInput = null;
FileOutputStream imageOutput = null;
try {
URL url = new URL("http://www.samplewebsite.com/" + mProductID);
BufferedReader reader =
new BufferedReader(new InputStreamReader(url.openStream()));
String jsonOutput = "";
String temp = "";
while ((temp = reader.readLine()) != null) {
jsonOutput += temp;
}
JSONObject json = new JSONObject(jsonOutput);
// ... Do some JSON parsing and save values to HashMap
String filename = mProductID + "-thumbnail.jpg";
URL thumbnailURL = new URL("http://www.samplewebsite.com/img/" + mProductID + ".jpg");
imageInput = thumbnailURL.openConnection().getInputStream();
imageOutput = mContext.openFileOutput(outputName, Context.MODE_PRIVATE);
int read;
byte[] data = new byte[1024];
while ((read = imageInput.read(data)) != -1) {
imageOutput.write(data, 0, read);
}
reader.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
finally {
try {
imageOutput.close();
imageInput.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return mProductInfoHashMap;
}