2011-11-13 37 views
0

我是Android平臺的初學者,遇到嚴重問題。我想從Gmail中獲取電子郵件,因此我創建了一個可以實現這一點的類。但是,當我在android中運行我的類NetworkOnMainThreadException。所以我創造了新的主題與新的Runnable如下:Android中的線程(NetworkOnMainThreadException與Javamail)的表現很奇怪

public void onClick(View v) { 
    new Thread(new Runnable() { 
    public void run() { 
     FetchEmails e = new FetchEmails(); 
    } 
    }).start(); 
} 

它的工作很好,但隨後我似乎無法有爲了得到實際的電子郵件訪問e.getMessage。考慮到這一點,我已經實現了Runnable到我的FetchEMails類,並完成了run()中的所有提取代碼,這是我的超級用戶。 run()中的最後一段代碼將變量設置爲'true'。然後在我的Activity類中,我實例化了這個類,並且完成了這個操作:new Thread(e).start();。下面我有一個while循環來檢查類已經完成到run()方法結束(通過檢查變量是否爲真)。所以現在我已經創建了我的新版本,它不會干擾UI,當代碼完成後我想要獲取消息。但似乎我仍然得到NetworkOnMainThreadException錯誤。任何幫助都是顯而易見的。謝謝。

回答

1

您應該使用AsyncTask來代替。

+0

我以前見過AsyncTask,所以基本上我需要從AsyncTask擴展我的類並執行doBackground中的所有命令。但是,當我完成獲取電子郵件,我將它們存儲在一個說ArrayList中,我如何知道我的Activity類中已完成抓取,現在我可以訪問ArrayList? –

+0

你可以在'onPostExecute()'中更新你的「UI」線程。因此,您可以將回調傳遞給AsyncTask類或將其聲明爲活動的內部類。然後你可以在那裏更新適配器或目標數組列表。 – dmon

+0

感謝您的迴應,我設法使用AsyncTask –