2015-10-31 3 views
0

Привет У меня есть проблема с AsyncTask, им разборе некоторые данные из Интернета, но когда я хочу использовать этот класс мое приложение выходит из строя:Android AsyncTask врезаться

10-31 12:29:29.941: E/AndroidRuntime(3741): FATAL EXCEPTION: AsyncTask #2 
10-31 12:29:29.941: E/AndroidRuntime(3741): java.lang.RuntimeException: An error occured while executing doInBackground() 
10-31 12:29:29.941: E/AndroidRuntime(3741):  at android.os.AsyncTask$3.done(AsyncTask.java:299) 
10-31 12:29:29.941: E/AndroidRuntime(3741):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
10-31 12:29:29.941: E/AndroidRuntime(3741):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
10-31 12:29:29.941: E/AndroidRuntime(3741):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
10-31 12:29:29.941: E/AndroidRuntime(3741):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
10-31 12:29:29.941: E/AndroidRuntime(3741):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
10-31 12:29:29.941: E/AndroidRuntime(3741):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
10-31 12:29:29.941: E/AndroidRuntime(3741):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
10-31 12:29:29.941: E/AndroidRuntime(3741):  at java.lang.Thread.run(Thread.java:856) 
10-31 12:29:29.941: E/AndroidRuntime(3741): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
10-31 12:29:29.941: E/AndroidRuntime(3741):  at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 
10-31 12:29:29.941: E/AndroidRuntime(3741):  at java.util.ArrayList.get(ArrayList.java:304) 
10-31 12:29:29.941: E/AndroidRuntime(3741):  at morisson.Notowaniagieldowe.MainActivity$Cena.doInBackground(MainActivity.java:169) 
10-31 12:29:29.941: E/AndroidRuntime(3741):  at morisson.Notowaniagieldowe.MainActivity$Cena.doInBackground(MainActivity.java:1) 
10-31 12:29:29.941: E/AndroidRuntime(3741):  at android.os.AsyncTask$2.call(AsyncTask.java:287) 
10-31 12:29:29.941: E/AndroidRuntime(3741):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
10-31 12:29:29.941: E/AndroidRuntime(3741):  ... 5 more 

и код является:

public class Cena extends AsyncTask<Integer,Void,String>{ 
ProgressDialog dialog; 

@Override 
protected String doInBackground(Integer... params) { 

    int a = params[0]; 
    try { 

     Document doc = Jsoup.connect("http://www.money.pl/gielda/gpw/akcje/").get(); 

     Elements elements = doc.select("td.ar"); 

     System.out.println("test2:" + elements.get(a).text()); 
     return elements.get(a).text(); 


    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

return null; 
} 
} 

Я использую еще 2 класса, которые используют AsyncTask, но у меня нет никаких проблем с ними. авария появляется, когда я пытаюсь напечатать «test2», и, конечно, когда я пытаюсь вернуть значение. Какие-либо предложения?

ответ

0

Если вы внимательно изучите журнал ошибок, вы обнаружите, что фактическая ошибка здесь составляет ArrayIndexOutOfBound исключение. Значение elements.get(a) или int a = params[0]; скорее всего будет возвращать null.

Поскольку исключение не было поймано (что привело к вашему сбою), я очень подозреваю, что int a = params[0]; является причиной проблемы, потому что это единственный код, который не находится в блоке try catch.

0
try { 
    Document doc = Joup.connect("http://www.money.pl/gielda/gpw/akcje/").get(); 
    Elements elements = doc.select("td.ar"); 
    if(elemetns!=null&&a!=null){ 
     System.out.println("test2:" + elements.get(a).text()); 
     return elements.get(a).text(); 
    } 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
Смежные вопросы