Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid AsyncTask doInBackground operation stopping suddenly with unhandled exception
    text
    copied!<p>I am having a strange problem.My <strong>asyncTask operation</strong> is getting terminated suddenly with an unhandled exception.<strong>about 45 % of the tasks is getting completed then the termination occurs.</strong></p> <p>here is my logcat</p> <pre><code>01-26 12:13:48.216: I/System.out(4421): success 01-26 12:13:48.386: I/System.out(4421): success 01-26 12:13:48.576: I/System.out(4421): success 01-26 12:13:48.616: D/dalvikvm(4421): GC_CONCURRENT freed 473K, 48% free 3256K/6215K, external 0K/0K, paused 3ms+4ms 01-26 12:13:48.806: I/System.out(4421): success 01-26 12:13:48.806: W/dalvikvm(4421): threadid=9: thread exiting with uncaught exception (group=0x40018560) 01-26 12:13:48.806: E/AndroidRuntime(4421): FATAL EXCEPTION: AsyncTask #1 01-26 12:13:48.806: E/AndroidRuntime(4421): java.lang.RuntimeException: An error occured while executing doInBackground() 01-26 12:13:48.806: E/AndroidRuntime(4421): at android.os.AsyncTask$3.done(AsyncTask.java:200) 01-26 12:13:48.806: E/AndroidRuntime(4421): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274) 01-26 12:13:48.806: E/AndroidRuntime(4421): at java.util.concurrent.FutureTask.setException(FutureTask.java:125) 01-26 12:13:48.806: E/AndroidRuntime(4421): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308) 01-26 12:13:48.806: E/AndroidRuntime(4421): at java.util.concurrent.FutureTask.run(FutureTask.java:138) 01-26 12:13:48.806: E/AndroidRuntime(4421): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 01-26 12:13:48.806: E/AndroidRuntime(4421): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 01-26 12:13:48.806: E/AndroidRuntime(4421): at java.lang.Thread.run(Thread.java:1019) 01-26 12:13:48.806: E/AndroidRuntime(4421): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 01-26 12:13:48.806: E/AndroidRuntime(4421): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257) 01-26 12:13:48.806: E/AndroidRuntime(4421): at java.util.ArrayList.get(ArrayList.java:311) 01-26 12:13:48.806: E/AndroidRuntime(4421): at android.gesture.Instance.temporalSampler(Instance.java:91) 01-26 12:13:48.806: E/AndroidRuntime(4421): at android.gesture.Instance.createInstance(Instance.java:76) 01-26 12:13:48.806: E/AndroidRuntime(4421): at android.gesture.GestureStore.addGesture(GestureStore.java:158) 01-26 12:13:48.806: E/AndroidRuntime(4421): at android.gesture.GestureLibrary.addGesture(GestureLibrary.java:68) 01-26 12:13:48.806: E/AndroidRuntime(4421): at com.android.pack.TestActivity.saveGesture(TestActivity.java:467) 01-26 12:13:48.806: E/AndroidRuntime(4421): at com.android.pack.TestActivity$A.doInBackground(TestActivity.java:102) 01-26 12:13:48.806: E/AndroidRuntime(4421): at com.android.pack.TestActivity$A.doInBackground(TestActivity.java:1) 01-26 12:13:48.806: E/AndroidRuntime(4421): at android.os.AsyncTask$2.call(AsyncTask.java:185) 01-26 12:13:48.806: E/AndroidRuntime(4421): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 01-26 12:13:48.806: E/AndroidRuntime(4421): ... 4 more 01-26 12:13:49.356: E/WindowManager(4421): Activity com.android.pack.TestActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@4053a358 that was originally added here 01-26 12:13:49.356: E/WindowManager(4421): android.view.WindowLeaked: Activity com.android.pack.TestActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@4053a358 that was originally added here 01-26 12:13:49.356: E/WindowManager(4421): at android.view.ViewRoot.&lt;init&gt;(ViewRoot.java:259) 01-26 12:13:49.356: E/WindowManager(4421): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148) 01-26 12:13:49.356: E/WindowManager(4421): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 01-26 12:13:49.356: E/WindowManager(4421): at android.view.Window$LocalWindowManager.addView(Window.java:465) 01-26 12:13:49.356: E/WindowManager(4421): at android.app.Dialog.show(Dialog.java:241) 01-26 12:13:49.356: E/WindowManager(4421): at com.android.pack.TestActivity.addgestures(TestActivity.java:159) 01-26 12:13:49.356: E/WindowManager(4421): at com.android.pack.TestActivity.onOptionsItemSelected(TestActivity.java:404) 01-26 12:13:49.356: E/WindowManager(4421): at android.app.Activity.onMenuItemSelected(Activity.java:2205) 01-26 12:13:49.356: E/WindowManager(4421): at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:776) 01-26 12:13:49.356: E/WindowManager(4421): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:143) 01-26 12:13:49.356: E/WindowManager(4421): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:855) 01-26 12:13:49.356: E/WindowManager(4421): at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:532) 01-26 12:13:49.356: E/WindowManager(4421): at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:122) 01-26 12:13:49.356: E/WindowManager(4421): at android.view.View$PerformClick.run(View.java:9107) 01-26 12:13:49.356: E/WindowManager(4421): at android.os.Handler.handleCallback(Handler.java:587) 01-26 12:13:49.356: E/WindowManager(4421): at android.os.Handler.dispatchMessage(Handler.java:92) 01-26 12:13:49.356: E/WindowManager(4421): at android.os.Looper.loop(Looper.java:130) 01-26 12:13:49.356: E/WindowManager(4421): at android.app.ActivityThread.main(ActivityThread.java:3835) 01-26 12:13:49.356: E/WindowManager(4421): at java.lang.reflect.Method.invokeNative(Native Method) 01-26 12:13:49.356: E/WindowManager(4421): at java.lang.reflect.Method.invoke(Method.java:507) 01-26 12:13:49.356: E/WindowManager(4421): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) 01-26 12:13:49.356: E/WindowManager(4421): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 01-26 12:13:49.356: E/WindowManager(4421): at dalvik.system.NativeStart.main(Native Method) 01-26 12:14:04.836: I/Process(4421): Sending signal. PID: 4421 SIG: 9 </code></pre> <p><strong>and here is the AsyncTask class</strong></p> <pre><code>class A extends AsyncTask&lt;File[],Integer,Void&gt; { private Context cnt; int count=0; @Override protected void onPreExecute() { } A(Context context) { cnt=context; } protected Void doInBackground(File[]... params) { // TODO Auto-generated method stub File[] newfiles=params[0]; File[] temp=null; int progress=0; float dircnt=0; int numberofdir=newfiles.length; for(File b:newfiles) { count=0; dirname=b.getName(); if(b.isDirectory()) { temp=b.listFiles(); } for(File a:temp) { gest=dotask.batchprocess(a.getPath()); if(gest!=null) System.out.println("success"); String name=dirname+"_"+count; saveGesture(name, gest); count++; } dircnt=dircnt+1; progress=(int)((dircnt/numberofdir)*100); try { Thread.sleep(60); publishProgress(progress); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return null; } @Override protected void onProgressUpdate(Integer... values) { // increment progress bar by progress value pd.setProgress(values[0]); pd.setMessage("completed "+dirname); } protected void onPostExecute() { pd.hide(); pd=null; } </code></pre> <p>}</p> <p>and here is the method that calls the Asynctask object and executes it</p> <pre><code>public void addgestures() { cView.postInvalidate(); dotask.setH(cView.getH()); dotask.setW(cView.getW()); count=0; files=null; /*if(dir.isDirectory()) { files=dir.listFiles(); }*/ files=dir.listFiles(); for(int i=0;i&lt;files.length;i++) { System.out.println(files[i].getPath()); } pd = new ProgressDialog(this); pd.setMessage("Matching progress"); pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pd.setMax(100); pd.setCancelable(false); pd.setProgress(0); pd.show(); A a=new A(this); a.execute(files); } </code></pre> <p>There is no error in the rest of the program as about 40% of the task is being done successfully..So I din't upload the rest of the program.</p> <pre><code>**here is the TESTACTIVITY CLASS** package com.android.pack; import java.io.File; import java.net.URISyntaxException; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.gesture.Gesture; import android.gesture.GestureLibraries; import android.gesture.GestureLibrary; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.text.Editable; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Toast; public class TestActivity extends Activity { /** Called when the activity is first created. */ int height; int weight; private ProgressDialog pd=null; customview cView; String path=""; String pathchk=""; String temp=""; String name=null; float pathSmooth[]; private File mStoreFile; Gesture gest; File dir; String dirname; File[] files; int count; int Height; int Weight; task dotask; Context ct; private static GestureLibrary sStore=null; private static final int FILE_SELECT_CODE = 0; public void perform() // { cView.set_file(pathchk); cView.postInvalidate(); } class A extends AsyncTask&lt;File[],Integer,Void&gt; { private Context cnt; int count=0; @Override protected void onPreExecute() { } A(Context context) { cnt=context; } protected Void doInBackground(File[]... params) { // TODO Auto-generated method stub File[] newfiles=params[0]; File[] temp=null; int progress=0; float dircnt=0; int numberofdir=newfiles.length; for(File b:newfiles) { count=0; dirname=b.getName(); if(b.isDirectory()) { temp=b.listFiles(); } for(File a:temp) { gest=dotask.batchprocess(a.getPath()); if(gest!=null) System.out.println("success"); String name=dirname+"_"+count; saveGesture(name, gest); count++; } dircnt=dircnt+1; progress=(int)((dircnt/numberofdir)*100); try { Thread.sleep(60); publishProgress(progress); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return null; } @Override protected void onProgressUpdate(Integer... values) { // increment progress bar by progress value pd.setProgress(values[0]); pd.setMessage("completed "+dirname); } protected void onPostExecute() { pd.hide(); pd=null; } } public void addgestures() { cView.postInvalidate(); dotask.setH(cView.getH()); dotask.setW(cView.getW()); count=0; files=null; /*if(dir.isDirectory()) { files=dir.listFiles(); }*/ files=dir.listFiles(); for(int i=0;i&lt;files.length;i++) { System.out.println(files[i].getPath()); } pd = new ProgressDialog(this); pd.setMessage("Matching progress"); pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pd.setMax(100); pd.setCancelable(false); pd.setProgress(0); pd.show(); A a=new A(this); a.execute(files); } public void showFileChooser() { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); // File file = new File("/sdcard"); intent.setType("file://*"); intent.addCategory(Intent.CATEGORY_OPENABLE); try { startActivityForResult( Intent.createChooser(intent, "Select a File to Upload"), FILE_SELECT_CODE); } catch (android.content.ActivityNotFoundException ex) { // Potentially direct the user to the Market with a Dialog Toast.makeText(this, "Please install a File Manager.", Toast.LENGTH_SHORT).show(); } } public void smoothPoint() { float pathScale[]=cView.getPathSmooth(); int pi; // Index over all the points in the trace int ti; // Index over all the traces of a tracegroup float Xavg,Yavg; //int numTraces=getNumTraces(); int numTraces=1; int stopCount=0; int numPoints =(pathScale.length)/2; float xsd,ysd; int count1=1,count2=1; float m2=0,m1=0; float sumX=0, sumY=0; //partial sum float Xchannel []=new float[numPoints*2]; float Xdist=0,Ydist=0; float Ychannel []=new float[numPoints*2]; float nXchannel[]= new float[numPoints*2*2]; float nYchannel[]=new float[numPoints*2*2]; int finalCount=1; float n1Xchannel[]= new float[numPoints*4*2]; float n1Ychannel[]=new float[numPoints*4*2]; float xfinal[] = new float[numPoints*4*2]; float yfinal[]= new float[numPoints*4*2]; int valid[]=new int[numPoints]; Log.v("number of points",numPoints+""); for(int i=0;i&lt;numPoints;i++) { //valid[i]=1; Xchannel[i]=pathScale[i*2]; Ychannel[i]=pathScale[i*2+1]; } for(ti=0;ti&lt;numTraces;ti++) { sumX=sumY=0; for(pi=0;pi&lt;numPoints-1;pi++) { sumX+=Math.abs((Math.abs(Xchannel[pi+1])-Math.abs(Xchannel[pi]))); sumY+=Math.abs((Math.abs(Ychannel[pi+1])-Math.abs(Ychannel[pi]))); } } for(pi=1;pi&lt;numPoints-1;pi++) { m1=(Ychannel[pi]-Ychannel[pi-1])/(Xchannel[pi]-Xchannel[pi-1]); m2=(Ychannel[pi+1]-Ychannel[pi])/(Xchannel[pi+1]-Xchannel[pi]); if(m1*m2&lt;0) { valid[pi]=0; stopCount++; } } nXchannel[0]=Xchannel[0]; nYchannel[0]=Ychannel[0]; for(pi=1;pi&lt;numPoints;pi++) { nXchannel[pi*2-1]=(Xchannel[pi]+Xchannel[pi-1])/2; nYchannel[pi*2-1]=(Ychannel[pi]+Ychannel[pi-1])/2; //System.out.print(" \n mid x and y "+nXchannel[pi*2-1]+nYchannel[pi*2-1]); nXchannel[pi*2]=Xchannel[pi]; nYchannel[pi*2]=Ychannel[pi]; count1+=2; } //System.out.println("new array... "); n1Xchannel[0]=nXchannel[0]; n1Ychannel[0]=nYchannel[0]; for(pi=1;pi&lt;count1;pi++) { n1Xchannel[pi*2-1]=(nXchannel[pi]+nXchannel[pi-1])/2; n1Ychannel[pi*2-1]=(nYchannel[pi]+nYchannel[pi-1])/2; //System.out.print(" \n mid x and y "+n1Xchannel[pi*2-1]+n1Ychannel[pi*2-1]); n1Xchannel[pi*2]=nXchannel[pi]; count2+=2; n1Ychannel[pi*2]=nYchannel[pi]; } Log.v("Count1",count1+""); Log.v("Count2",count2+""); xfinal[0]=n1Xchannel[0]; yfinal[0]=n1Ychannel[0]; Xavg=sumX/(numPoints -1); Log.v("finalCount",finalCount+""); Log.v("Xavg",sumX+""); Yavg=sumY/(numPoints-1) ; for(pi=1;pi&lt;count2-1;pi++) { Xdist=Math.abs((Math.abs(n1Xchannel[pi])-Math.abs(xfinal[finalCount-1]))); Ydist=Math.abs((Math.abs(n1Ychannel[pi])-Math.abs(yfinal[finalCount-1]))); if(Xdist&gt;=Xavg||Ydist&gt;=Yavg) { xfinal[finalCount]=n1Xchannel[pi]; yfinal[finalCount++]=n1Ychannel[pi]; } } pathSmooth=new float[finalCount*2]; for(pi=0;pi&lt;finalCount;pi++) { pathSmooth[pi*2] = xfinal[pi]; pathSmooth[pi*2+1] = yfinal[pi]; //pnts.get(pi).x=(int) nXchannel[pi]; //pnts.get(pi).y=(int) nYchannel[pi]; ////System.out.println("x "+(int)nXchannel[pi]+ " and y "+(int)nYchannel[pi]); } cView.setPathSmooth(pathSmooth); } protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case FILE_SELECT_CODE: if (resultCode == RESULT_OK) { // Get the Uri of the selected file Uri uri = data.getData(); Log.v("check", "File Uri: " + uri.toString()); // Get the path try { path = FileUtils.getPath(this, uri); pathchk=path.substring(12); perform(); } catch (URISyntaxException e) { // TODO Auto-generated catch block Log.v("error", "File Path: "+pathchk); } Log.v("check", "File Path: "+path); // Get the file instance // File file = new File(path); // Initiate the upload } break; case 1: if(resultCode==RESULT_OK) { Uri uri=data.getData(); dir=new File(uri.getPath()); dirname=dir.getName(); //addgestures(); } break; } super.onActivityResult(requestCode, resultCode, data); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); cView = (customview)findViewById(R.id.customview1); LinearLayout ll = new LinearLayout(this); ll.setOrientation(LinearLayout.VERTICAL); mStoreFile= new File(Environment.getExternalStorageDirectory(), "gestures"); if (sStore == null) { sStore = GestureLibraries.fromFile(mStoreFile); } dotask=new task(); //select=(Button)findViewById(R.id.button1); } public boolean onCreateOptionsMenu(Menu menu) { //call the base class to include system menus super.onCreateOptionsMenu(menu); menu.add(0,1,0,"Open File"); // title menu.add(0,2,1,"Smoothen"); menu.add(0,3,2,"add to gesture library"); menu.add(0,4,3,"Assign a name"); menu.add(0,5,4,"select a folder"); menu.add(0,6,5,"Exit"); //It is important to return true to see the menu return true; } public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection switch (item.getItemId()) { case 1: showFileChooser(); return true; case 2: smoothPoint(); return true; case 3: /*if(name.length()&lt;1) Toast.makeText(getApplicationContext(), "Give a name to the gesture ist", Toast.LENGTH_LONG).show(); else { gest=cView.batchprocess(pathchk); saveGesture(name, gest); }*/ addgestures(); return true; case 4: nameDialog(); return true; case 5: Intent intent = new Intent("org.openintents.action.PICK_DIRECTORY"); intent.setData(Uri.parse("file:///sdcard")); intent.putExtra("org.openintents.extra.TITLE", "Please select a folder"); intent.putExtra("org.openintents.extra.BUTTON_TEXT", "Use this folder"); startActivityForResult(intent, 1); return true; case 6: Toast.makeText(getApplicationContext(), "exiting", Toast.LENGTH_LONG).show(); System.exit(1); return true; default: return super.onOptionsItemSelected(item); } } public void nameDialog() { AlertDialog.Builder alert = new AlertDialog.Builder(this); alert.setTitle("Title"); alert.setMessage("Message"); // Set an EditText view to get user input final EditText input = new EditText(this); alert.setView(input); alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { name = input.getText().toString(); //Log.d("name",name); check(); // Do something with value! } }); alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // Canceled. } }); alert.show(); } public static GestureLibrary get() { return sStore; } public void check() { if(name.length()&lt;1) Toast.makeText(this,"No name is set for this gesture",Toast.LENGTH_SHORT).show(); else Toast.makeText(this,"GESTURE NAME IS "+name,Toast.LENGTH_SHORT).show(); } public void saveGesture(String name,Gesture gest) { final GestureLibrary store = get(); store.addGesture(name, gest); store.save(); } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload