Суть приложения такова, что я ввожу какие-то символы, которыми дополняются определенный url и с этого url уже идет парсинг нужных мне значений. При вводе правильных значений все работает как нужно, но вот если ввожу случайно символы которых не существует то приложение падает (хотя экспешены вроде все прописаны). Вот текст ошибки:
FATAL EXCEPTION: AsyncTask #1
Process: m.masyuk.com.fb.stackinfo, PID: 3901
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:318)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.get(ArrayList.java:411)
at m.masyuk.com.fb.stackinfo.MainActivity$SetInfo.doInBackground(MainActivity.java:260)
at m.masyuk.com.fb.stackinfo.MainActivity$SetInfo.doInBackground(MainActivity.java:234)
at android.os.AsyncTask$2.call(AsyncTask.java:304)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
И сам код:
private class SetInfo extends AsyncTask<String, Void, String> {
private TextView textViewForImport;
private int numImport;
private String code;
SetInfo(TextView textViewForImport, String code, int numImport) {
this.textViewForImport = textViewForImport;
this.code = code;
this.numImport = numImport;
}
@Override
protected String doInBackground(String... params) {
String url = params[0];
String stackInfo = "";
org.jsoup.nodes.Document doc;
try {
doc = Jsoup.connect(url).get();
Element mc_element = doc.select(code).get(numImport);
stackInfo = mc_element.text();
} catch (IOException e) {
e.printStackTrace();
}
return stackInfo;
}
@Override
protected void onPostExecute(String aVoid) {
textViewForImport.setText(aVoid);
}
}
ЗЫ Вот 260 строка, на которую указывает ошибка
Element mc_element = doc.select(code).get(numImport);
Ошибка Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 в данном примере говорит о том, что вы пытаетесь получить данные, которых нет. Перед получение следует проверить, есть ли вообще эти данные:
doc = Jsoup.connect(url).get();
if (!doc.select(code).isEmpty()) {
Element mc_element = doc.select(code).get(numImport);
stackInfo = mc_element.text();
}
приложение падает (хотя экспешены вроде все прописаны)
Вы ловите только IOException, а на деле получаете IndexOutOfBoundsException, который остаётся непойманым. Чтобы ловить все исключения, нужно указывать тип Exception.
Но данный способ обработки ошибок я не рекомендую, так как могут возникнуть какие-то другие исключения, о которых вы даже не узнаете.
Продвижение своими сайтами как стратегия роста и независимости