I’m using AsyncTask to get all the data my app needs from a server. This works fine. However, when restarting the application for the second time, the app crashes.
I get the following errorlog:
04-17 14:22:57.171: E/AndroidRuntime(956): FATAL EXCEPTION: AsyncTask #2
04-17 14:22:57.171: E/AndroidRuntime(956): java.lang.RuntimeException: An error occured while executing doInBackground()
04-17 14:22:57.171: E/AndroidRuntime(956): at android.os.AsyncTask$3.done(AsyncTask.java:278)
04-17 14:22:57.171: E/AndroidRuntime(956): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
04-17 14:22:57.171: E/AndroidRuntime(956): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
04-17 14:22:57.171: E/AndroidRuntime(956): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
04-17 14:22:57.171: E/AndroidRuntime(956): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
04-17 14:22:57.171: E/AndroidRuntime(956): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
04-17 14:22:57.171: E/AndroidRuntime(956): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
04-17 14:22:57.171: E/AndroidRuntime(956): at java.lang.Thread.run(Thread.java:856)
04-17 14:22:57.171: E/AndroidRuntime(956): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=14; index=14
04-17 14:22:57.171: E/AndroidRuntime(956): at flexform.ro.android.app.FlexFormActivity$getDataClass.doInBackground(FlexFormActivity.java:88)
04-17 14:22:57.171: E/AndroidRuntime(956): at flexform.ro.android.app.FlexFormActivity$getDataClass.doInBackground(FlexFormActivity.java:1)
04-17 14:22:57.171: E/AndroidRuntime(956): at android.os.AsyncTask$2.call(AsyncTask.java:264)
04-17 14:22:57.171: E/AndroidRuntime(956): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
Below you have my asynctask class:
class getDataClass extends AsyncTask<String, Void, String>{
protected String doInBackground(String...urls){
String response = "";
for(String url : urls){
response = "";
descriptionArray_Counter++;
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try{
HttpResponse execute = client.execute(httpGet);
InputStream content = execute.getEntity().getContent();
BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
String s = "";
while((s = buffer.readLine()) != null){
response += s;
}
}catch(Exception e){
e.printStackTrace();
}
Resources.descriptionArray[descriptionArray_Counter] = response;
}
return response;
}
protected void onPostExecute(String result){
Toast.makeText(getApplicationContext(), "All entres have been loaded!", Toast.LENGTH_SHORT).show();
JSONArray offersJSON;
JSONArray newsJSON;
try{
newsJSON = new JSONArray(Resources.descriptionArray[9]);
if(newsJSON.length() > 20)
Resources.newsLength = 20;
else
Resources.newsLength = newsJSON.length();
for(int i = 0; i < Resources.newsLength; i++){
JSONObject tempObject = newsJSON.getJSONObject(i);
Resources.news_id[i] = tempObject.getString("id");
Resources.news_title[i] = tempObject.getString("title");
Resources.news_descriptionShort[i] = tempObject.getString("description_short");
Resources.news_descriptionLong[i] = tempObject.getString("description_long");
Resources.news_date[i] = tempObject.getString("date");
Resources.news_urgent[i] = tempObject.getString("urgent");
}
}catch(JSONException e){
e.printStackTrace();
}
try {
offersJSON = new JSONArray(Resources.descriptionArray[10]);
if(offersJSON.length() > 20)
Resources.offersLength = 20;
else
Resources.offersLength = offersJSON.length();
for(int i = 0; i < Resources.offersLength; i++){
JSONObject tempObject = offersJSON.getJSONObject(i);
Resources.offers_id[i] = tempObject.getString("id");
Resources.offers_offertant[i] = tempObject.getString("Ofertant");
Resources.offers_description[i] = tempObject.getString("Descriere");
Resources.offers_contact[i] = tempObject.getString("Contact");
Resources.offers_date[i] = tempObject.getString("Data");
Resources.offers_available[i] = tempObject.getString("Valabil");
}
Intent intent = new Intent(FlexFormActivity.this, MainMenu.class);
startActivity(intent);
}catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
I’m hoping someone with a bit more experience will be able to explain to me the proper, correct way to go around this crash…
Cheers and thanks to whoever takes the time to answer and help me out…
I would suspect that you are never resetting your descriptionArray_Counter back to 0. So when you execute your task the following line
is probably evaluating to
and your description array is only length 14. You can see in your stack trace that its telling you this exactly.