2015-12-20 157 views
-3

我正在接收來自服務器的郵件,當收到郵件時顯示進度對話框,當我收到對話框關閉的所有郵件時,我無法訪問我想要顯示的列表視圖郵件,它給了我例外,這裏是代碼。Asynctask#1執行doInBackground()時發生錯誤

AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() { 

@Override 
     protected void onPreExecute() { 
      pd = new ProgressDialog(Inb.this); 
      pd.setTitle("Please wait.."); 
      pd.setMessage("Getting mails..."); 
      pd.setCancelable(false); 
      pd.setIndeterminate(true); 
      pd.show(); 
     } 

     @Override 
     protected Void doInBackground(Void... arg0) { 
      //Do something... 
      try { 
       publishProgress(arg0); 
       adopter=new List(Inb.this,getMessages()); 

      } catch (MessagingException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } catch (IOException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
      list.setAdapter(adopter); 
      return null; 

     } 
     @Override 
     protected void onPostExecute(Void result) { 
       pd.dismiss(); 
     } 

    }; 
    task.execute(); 

    StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
    StrictMode.setThreadPolicy(policy); 

    list=(ListView)findViewById(R.id.list); 
    list.setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
      long arg3) { 
     // TODO Auto-generated method stub 

     Intent in=new Intent(Inb.this,EmailView.class); 
     Globals.message=messageList.get(arg2); 
    /// in.putExtra("messagedetail",messageList.get(arg2)); 
     startActivity(in); 
    } 
});} 


public ArrayList<Message> getMessages() throws MessagingException,IOException{ 
    Folder folder = null; 
    Store store = null; 
    String usname=""; 
    String passw=""; 

    try { 
     Properties props = System.getProperties(); 
     props.setProperty("mail.store.protocol", "imaps"); 

     Session session = Session.getDefaultInstance(props, null); 
     session.setDebug(true); 
     store = session.getStore("imaps"); 

     //For Hotmail Mailbox inbox messages 
     //store.connect("imap-mail.outlook.com",emaill, pww); 
     //For Yahoo Mailbox inbox messages 
     //store.connect("imap.mail.yahoo.com",emaill, pww); 
     //For Google Mailbox Inbox messages 
     store.connect("imap.gmail.com",usname, passw); 
    folder = store.getFolder("INBOX"); 
     /* Others GMail folders : 
     * [Gmail]/All Mail This folder contains all of your Gmail messages. 
     * [Gmail]/Drafts  Your drafts. 
     * [Gmail]/Sent Mail Messages you sent to other people. 
     * [Gmail]/Spam  Messages marked as spam. 
     * [Gmail]/Starred Starred messages. 
     * [Gmail]/Trash  Messages deleted from Gmail. 
     */ 
     folder.open(Folder.READ_WRITE); 
     messageList.clear(); 
    int n=folder.getMessageCount(); 
    for(int i=n-1,j=1;j!=20;j++,i--) 
    { 
     Message msg= folder.getMessage(i); 

     msg.getSubject(); 
     messageList.add(msg); 
    } 
    return messageList; 
    } 
    finally { 
     if (folder != null && folder.isOpen()) { folder.close(true); } 
     if (store != null && store.isConnected()) { store.close(); } 
    } 

,這是我的日誌

12-20 21:37:58.551:E/AndroidRuntime(1568):FATAL EXCEPTION: AsyncTask #1 
12-20 21:37:58.551:E/AndroidRuntime(1568):Process: com.minio, PID: 1568 
12-20 21:37:58.551:E/AndroidRuntime(1568):java.lang.RuntimeException:An error occured while executing doInBackground()  
12-20 21:37:58.551android.os.AsyncTask$3.done(AsyncTask.java:300) 
12-20 21:37:58.551:E/AndroidRuntime(1568):atjava.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 
21:37:58.551:E/AndroidRuntime(1568):atjava.util.concurrent.FutureTask.setException(FutureTask.java:222) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at java.lang.Thread.run(Thread.java:818) 
12-20 21:37:58.551: E/AndroidRuntime(1568): Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:7062) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at android.view.ViewRootImpl.focusableViewAvailable(ViewRootImpl.java:3118) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:698) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:698) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:698) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:698) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:698) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:698) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:698) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:698) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:698) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:698) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:698) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at android.view.View.setFlags(View.java:10482) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at android.view.View.setFocusableInTouchMode(View.java:7172) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at android.widget.AdapterView.checkFocus(AdapterView.java:915) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at android.widget.ListView.setAdapter(ListView.java:503) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at com.minio.Inb$1.doInBackground(Inb.java:85) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at com.minio.Inb$1.doInBackground(Inb.java:1) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at android.os.AsyncTask$2.call(AsyncTask.java:288) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
12-20 21:37:58.551: E/AndroidRuntime(1568):  ... 4 more 
12-20 21:37:59.621: E/OpenGLRenderer(1568): SFEffectCache:clear(), mSize = 0 
12-20 21:37:59.651: E/WindowManager(1568): android.view.WindowLeaked: Activity com.minio.Inbox has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{e11b090 V.E..... R......D 0,0-1002,486} that was originally added here 
12-20 21:37:59.651: E/WindowManager(1568): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:457) 
12-20 21:37:59.651: E/WindowManager(1568): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:277) 
12-20 21:37:59.651: E/WindowManager(1568): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) 
12-20 21:37:59.651: E/WindowManager(1568): at android.app.Dialog.show(Dialog.java:312) 
12-20 21:37:59.651: E/WindowManager(1568): at com.minio.Inb$1.onPreExecute(Inb.java:67) 
12-20 21:37:59.651: E/WindowManager(1568): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587) 
12-20 21:37:59.651: E/WindowManager(1568): at android.os.AsyncTask.execute(AsyncTask.java:535) 
12-20 21:37:59.651: E/WindowManager(1568): at com.minio.Inb.onCreate(Inb.java:99) 
12-20 21:37:59.651: E/WindowManager(1568): at android.app.Activity.performCreate(Activity.java:6221) 
12-20 21:37:59.651: E/WindowManager(1568): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
12-20 21:37:59.651: E/WindowManager(1568): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2611) 
12-20 21:37:59.651: E/WindowManager(1568): at android.app.ActivityThread.startActivityNow(ActivityThread.java:2404) 
12-20 21:37:59.651: E/WindowManager(1568): at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135) 
12-20 21:37:59.651: E/WindowManager(1568): at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347) 
12-20 21:37:59.651: E/WindowManager(1568): at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:769) 
12-20 21:37:59.651: E/WindowManager(1568): at android.widget.TabHost.setCurrentTab(TabHost.java:428) 
12-20 21:37:59.651: E/WindowManager(1568): at android.widget.TabHost.addTab(TabHost.java:255) 
12-20 21:37:59.651: E/WindowManager(1568):  at com.minio.Inbox.onCreate(Inbox.java:76) 
12-20 21:37:59.651: E/WindowManager(1568): at android.app.Activity.performCreate(Activity.java:6221) 
12-20 21:37:59.651: E/WindowManager(1568): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
12-20 21:37:59.651: E/WindowManager(1568): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2611) 
12-20 21:37:59.651: E/WindowManager(1568): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723) 
12-20 21:37:59.651: E/WindowManager(1568): at android.app.ActivityThread.access$900(ActivityThread.java:172) 
12-20 21:37:59.651: E/WindowManager(1568): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422) 
12-20 21:37:59.651: E/WindowManager(1568): at android.os.Handler.dispatchMessage(Handler.java:102) 
12-20 21:37:59.651: E/WindowManager(1568): at android.os.Looper.loop(Looper.java:145) 
12-20 21:37:59.651: E/WindowManager(1568): at android.app.ActivityThread.main(ActivityThread.java:5832) 
12-20 21:37:59.651: E/WindowManager(1568): at java.lang.reflect.Method.invoke(Native Method) 
12-20 21:37:59.651: E/WindowManager(1568): at java.lang.reflect.Method.invoke(Method.java:372) 
12-20 21:37:59.651: E/WindowManager(1568): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388) 
12-20 21:37:59.651: E/WindowManager(1568): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183) 

回答

1

這條線:list.setAdapter(adopter);doInBackground將拋出一個錯誤 - 你不能從後臺線程觸摸主UI線程,而不是你應該傳遞結果(在你的情況下列表)到OnPostExecute並更新適配器(OnPostExecute在主UI線程中運行)。

+0

非常感謝解決:) –

相關問題