Note that there are some explanatory texts on larger screens.

plurals
  1. POException occurs in Async task
    primarykey
    data
    text
    <p>I am getting this exception. When, i'm trying to run my program. In my program i am executing an <code>AsyncTask</code> For each download and upload tasks, I have created new <code>AsyncTask</code> object and tried to run it in background. I tried to find my mistake. But i can't find where i am going wrong. Below are my stack trace and code of my program - </p> <pre><code>05-07 10:00:44.899: E/AndroidRuntime(367): FATAL EXCEPTION: AsyncTask #1 05-07 10:00:44.899: E/AndroidRuntime(367): java.lang.RuntimeException: An error occured while executing doInBackground() 05-07 10:00:44.899: E/AndroidRuntime(367): at android.os.AsyncTask$3.done(AsyncTask.java:200) 05-07 10:00:44.899: E/AndroidRuntime(367): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274) 05-07 10:00:44.899: E/AndroidRuntime(367): at java.util.concurrent.FutureTask.setException(FutureTask.java:125) 05-07 10:00:44.899: E/AndroidRuntime(367): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308) 05-07 10:00:44.899: E/AndroidRuntime(367): at java.util.concurrent.FutureTask.run(FutureTask.java:138) 05-07 10:00:44.899: E/AndroidRuntime(367): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 05-07 10:00:44.899: E/AndroidRuntime(367): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 05-07 10:00:44.899: E/AndroidRuntime(367): at java.lang.Thread.run(Thread.java:1019) 05-07 10:00:44.899: E/AndroidRuntime(367): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 05-07 10:00:44.899: E/AndroidRuntime(367): at android.os.Handler.&lt;init&gt;(Handler.java:121) 05-07 10:00:44.899: E/AndroidRuntime(367): at android.widget.Toast.&lt;init&gt;(Toast.java:68) 05-07 10:00:44.899: E/AndroidRuntime(367): at android.widget.Toast.makeText(Toast.java:231) 05-07 10:00:44.899: E/AndroidRuntime(367): at com.android.test.Helper.downloadTask(t.java:269) 05-07 10:00:44.899: E/AndroidRuntime(367): at com.android.test.Helper.doInBackground(t.java:132) 05-07 10:00:44.899: E/AndroidRuntime(367): at com.android.test.Helper.doInBackground(t.java:1) 05-07 10:00:44.899: E/AndroidRuntime(367): at android.os.AsyncTask$2.call(AsyncTask.java:185) 05-07 10:00:44.899: E/AndroidRuntime(367): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 05-07 10:00:44.899: E/AndroidRuntime(367): ... 4 more </code></pre> <p>This is my AsynTask Helper</p> <pre><code>class Helper extends AsyncTask&lt;Integer, Void, Void&gt; { private SmbFile dfile; private String dfilepath; private SmbFile dfolder; private String dfolderpath; private File ufolder; private SmbFile ufoldersmb; private NtlmPasswordAuthentication auth; private int upstate=0; private int downstate=0; private Context context; private ArrayList&lt;SmbFile&gt; smbArray=new ArrayList&lt;SmbFile&gt;(); private String ext; private int tasknumber; private String taskname; public Context getcontext() { return context; } public int gettasknumber() { return tasknumber; } public String gettaskname() { return taskname; } public int getupstate() { return upstate; } public int getdownstate() { return downstate; } public void setdfile(SmbFile a) { this.dfile = a; } public void setdfilepath(String b) { this.dfilepath = b; } public void setdfolder(SmbFile c) { this.dfolder = c; } public void setdfolderpath(String d) { this.dfolderpath = d; } public void setufolder(File g) { this.ufolder = g; } public void setufoldersmb(SmbFile h) { this.ufoldersmb = h; } public void setauthentication(NtlmPasswordAuthentication i) { this.auth = i; } public void setupstate(int j) { upstate = j; } public void setdownstate(int k) { downstate = k; } public void setcontext(Context l) { context = l; } public void setarraysmb(SmbFile m) { this.smbArray.add(m); } public void setextstorage(String n) { this.ext=n; } public void settasknumber(int o) { this.tasknumber=o; } public void settaskname(String p) { this.taskname=p; } @Override protected Void doInBackground(Integer... params) { //check flag to execute exactly method switch (params[0]) { case 0: downloadTask(); break; case 1: Toast.makeText(context, "AccessPC Upload task "+tasknumber+" Started", Toast.LENGTH_LONG).show(); uploadFolder(ufolder,ufoldersmb); break; default:break; } return null; } void downloadFile(SmbFile dfile,String dpath) { StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath()); long blockSize = statFs.getBlockSize(); long freeSize = statFs.getFreeBlocks()*blockSize; try { if(!((freeSize-dfile.length())&lt;0)) { SmbFileInputStream din=new SmbFileInputStream(dfile); FileOutputStream dout=new FileOutputStream(dpath); int c; while((c=din.read())!=-1) { dout.write(c); } if (din != null) { din.close(); } if (dout != null) { dout.close(); } } else { Toast.makeText(context, "AccessPC Download Task failed ",Toast.LENGTH_LONG).show(); } } catch(Exception e) { Toast.makeText(context, "AccessPC Download Task failed "+e,Toast.LENGTH_LONG).show(); } } void downloadFolder(SmbFile dfolder,String dfolderpath) { try { dfolderpath=dfolderpath+dfolder.getName(); if(!(new File(dfolderpath)).exists()) { (new File(dfolderpath)).mkdir(); } SmbFile[] temp=dfolder.listFiles(); if(temp.length==0) { Toast.makeText(context, "df,downstate="+downstate,Toast.LENGTH_LONG).show(); return; } for(SmbFile m:temp) { if(m.isFile()) { downloadFile(m,dfolderpath+m.getName()); } else { downloadFolder(m,dfolderpath); } } } catch (Exception e) { Toast.makeText(context, "AccessPC Download Task failed "+e,Toast.LENGTH_LONG).show(); } } void uploadFile(File ufile,SmbFile ufilesmb) { try { FileInputStream uin=new FileInputStream(ufile); SmbFile tempSmb=new SmbFile(ufilesmb.getPath()+ufile.getName(),auth); SmbFileOutputStream uout=new SmbFileOutputStream(tempSmb); int c; while((c=uin.read())!=-1) { uout.write(c); } if (uin != null) { uin.close(); } if (uout != null) { uout.close(); } } catch(Exception e) { Toast.makeText(context, "AccessPC Upload Task failed "+e, Toast.LENGTH_LONG).show(); } } void uploadFolder(File ufolder,SmbFile ufoldersmb) { try { SmbFile tempSmb=new SmbFile(ufoldersmb.getPath()+ufolder.getName()+"/",auth); if(!tempSmb.exists()) { tempSmb.mkdir(); } File[] ftemp=ufolder.listFiles(); if(ftemp.length==0) { setupstate(2); return; } for(File m:ftemp) { if(m.isFile()) { uploadFile(m,tempSmb); } else { uploadFolder(m,tempSmb); } } } catch (Exception e) { Toast.makeText(context, "AccessPC Upload Task failed "+e,Toast.LENGTH_LONG).show(); } } void downloadTask() { Toast.makeText(context, "AccessPC download task "+tasknumber+" Started", Toast.LENGTH_LONG).show(); try { for(SmbFile m:smbArray) { if(m.isFile()) { setdfile(m); setdfilepath(ext+m.getName()); downloadFile(dfile,dfilepath); } else { setdfolder(m); setdfolderpath(ext); downloadFolder(dfolder,dfolderpath); } } setdownstate(2); } catch (Exception e) { Toast.makeText(context,"Download error "+e,Toast.LENGTH_LONG).show(); } } @Override protected void onPostExecute(Void result) { if(upstate==2) { setupstate(0); Toast.makeText(context, "AccessPC "+taskname+" task "+tasknumber+" Finished", Toast.LENGTH_LONG).show(); } if(downstate==2) { setdownstate(0); Toast.makeText(context, "AccessPC "+taskname+" task "+tasknumber+" Finished", Toast.LENGTH_LONG).show(); } } } </code></pre> <p>This is my options menu. I ve used this to do my asyn task variable i have used in my main activity which helps this task:</p> <pre><code>String extStorage=Environment.getExternalStorageDirectory()+"/t/"; ArrayList&lt;Helper&gt; helpobject=new ArrayList&lt;Helper&gt;(); int uptask=0; int downtask=0; public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case DOWNLOAD1: MENU_STATE=MENU_DOWNLOAD; map=display_check(current); return true; case UPLOAD: if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { if(current.getShare()==null) { Toast.makeText(this,"UPLOAD FAILED",Toast.LENGTH_LONG).show(); } else { File f=new File(extStorage); Helper help=new Helper(); help.setufolder(f); help.setufoldersmb(current); help.setauthentication(auth); help.setupstate(1); help.settasknumber(uptask); uptask++; help.settaskname("Upload"); help.setcontext(this.getApplicationContext()); help.execute(1); } } else { Toast.makeText(this,"UPLOAD FAILED--NO SD CARD FOUND",Toast.LENGTH_LONG).show(); } return true; case DELETE1: MENU_STATE=MENU_DELETE; map=display_check(current); return true; case QUIT: int x=0; for(Helper k:helpobject) { if(k.getStatus().equals(AsyncTask.Status.RUNNING)||k.getStatus().equals(AsyncTask.Status.RUNNING)) { Toast.makeText(k.getcontext(), "AccessPC "+k.gettaskname()+" "+k.gettasknumber()+" Cancelled", Toast.LENGTH_SHORT).show(); k.cancel(true); } helpobject.remove(x); x++; } return true; case DOWNLOAD2: if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { int tempcount=0; for(int i=0;i&lt;object.getCount();i++) { if(object.getter(i)==true) { tempcount++; } } if(tempcount==0) { Toast.makeText(this,"Please choose atleast one item for download!!",Toast.LENGTH_LONG).show(); } else { Helper help=new Helper(); helpobject.add(help); help.settasknumber(downtask); downtask++; help.settaskname("Download"); help.setcontext(this.getApplicationContext()); help.setextstorage(extStorage); help.setdownstate(1); for(int i=0;i&lt;object.getCount();i++) { if(object.getter(i)==true) { help.setarraysmb(map.get(object.getItem(i))); } } help.execute(0); } } else { Toast.makeText(this,"DOWNLOAD FAILED--NO SD CARD FOUND",Toast.LENGTH_LONG).show(); } return true; case DELETE2: for(int i=0;i&lt;object.getCount();i++) { if(object.getter(i)==true) { try { map.get(object.getItem(i)).delete(); } catch (Exception e) { Toast.makeText(this,"cannot be deleted "+e,Toast.LENGTH_LONG).show(); } } } return true; case CANCEL: MENU_STATE=MENU_GENERAL; map=display(current); return true; case FINISH: finish(); default: return super.onOptionsItemSelected(item); } } </code></pre> <p>hi,when i tried to display the toast, as mentioned in one of the below comments, ive got the same exception .please see the code below whih i ve used to dispaly Toast in my async task:</p> <pre><code>(new Activity()).runOnUiThread(new Runnable(){@Override public void run() {//Your Toast Toast.makeText(context, "AccessPC Download Task failed ",Toast.LENGTH_LONG).show(); }}); </code></pre> <p>Do i need to make any changes to my async task code or options menu code?</p> <p>I ve used handler like this:</p> <pre><code>public Handler handler = new Handler() { public void handleMessage(Message msg) { Bundle b = msg.getData(); String key = b.getString(null); Toast.makeText(getApplicationContext(),key, Toast.LENGTH_SHORT).show(); } }; </code></pre> <p>and i am calling handler like this:</p> <pre><code>Message msg = new Message(); Bundle b = new Bundle(); b.putString(null, "AccessPC "+taskname+" task "+tasknumber+" Finished"); msg.setData(b); //this is error t.handler.sendMessage(msg); </code></pre> <p>But how can i call a non-static method?do i need to create an object for my main class(class t extends list activity)?</p> <p>Hi, please see another exception that ive got when i select 'QUIT' operation from options menu for the above async task and menu ive posted. how to avoid this exception:</p> <pre><code>05-07 16:24:07.573: E/AndroidRuntime(13466): FATAL EXCEPTION: main 05-07 16:24:07.573: E/AndroidRuntime(13466): java.util.ConcurrentModificationException 05-07 16:24:07.573: E/AndroidRuntime(13466): at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:576) 05-07 16:24:07.573: E/AndroidRuntime(13466): at com.android.test.t.onOptionsItemSelected(t.java:622) 05-07 16:24:07.573: E/AndroidRuntime(13466): at android.app.Activity.onMenuItemSelected(Activity.java:2205) 05-07 16:24:07.573: E/AndroidRuntime(13466): at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:748) 05-07 16:24:07.573: E/AndroidRuntime(13466): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:143) 05-07 16:24:07.573: E/AndroidRuntime(13466): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:855) 05-07 16:24:07.573: E/AndroidRuntime(13466): at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:532) 05-07 16:24:07.573: E/AndroidRuntime(13466): at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:122) 05-07 16:24:07.573: E/AndroidRuntime(13466): at android.view.View$PerformClick.run(View.java:9080) 05-07 16:24:07.573: E/AndroidRuntime(13466): at android.os.Handler.handleCallback(Handler.java:587) 05-07 16:24:07.573: E/AndroidRuntime(13466): at android.os.Handler.dispatchMessage(Handler.java:92) 05-07 16:24:07.573: E/AndroidRuntime(13466): at android.os.Looper.loop(Looper.java:123) 05-07 16:24:07.573: E/AndroidRuntime(13466): at android.app.ActivityThread.main(ActivityThread.java:3683) 05-07 16:24:07.573: E/AndroidRuntime(13466): at java.lang.reflect.Method.invokeNative(Native Method) 05-07 16:24:07.573: E/AndroidRuntime(13466): at java.lang.reflect.Method.invoke(Method.java:507) 05-07 16:24:07.573: E/AndroidRuntime(13466): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 05-07 16:24:07.573: E/AndroidRuntime(13466): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 05-07 16:24:07.573: E/AndroidRuntime(13466): at dalvik.system.NativeStart.main(Native Method) </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

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