2012-03-15 66 views
12

我試圖在我的應用程序中處理異常。我正在嘗試記錄異常,然後使用Toast警告用戶存在問題。我在我所有課程中都有這個擴展Activity的工作發現。活動類別之外的Android環境

但是,在沒有擴展活動的任何類中,我不能使用toast方法,因爲我無法獲取當前上下文。有沒有簡單的方法來解決這個問題,或者我的班級的所有擴展活動?

+0

特別是你的工作有什麼其他結構?他們中的許多人或者已經有一個Context,或者在某個時候獲得傳遞給他們的上下文。 – FoamyGuy 2012-03-15 17:57:02

+0

您可以將上下文設置爲成員字段並在構造函數中設置。但是這可能導致內存泄漏,請謹慎使用(避免靜態引用上下文)。 – j0ntech 2012-03-15 17:57:43

+0

我有兩個類:1)RegistrationScreen,它擴展了Activity。 2)不擴展Activity的SocketClient。當用戶在RegistrationScreen中提交表單時,它會創建一個新的SocketClient對象,該對象通過套接字連接進行註冊(引發IOException的位)。如果成功的話,SocketClient會向RegistrationScreen類返回值,但如果它不成功,我會掙扎。我應該讓SocketClient拋出異常並在RegistrationScreen中捕獲它們嗎? – Joseph 2012-03-15 18:01:22

回答

15

你只是通過上下文 當你調用自Activity類的呼叫Non-Activity類像

YourNonActivtyClass obj = new YourNonActivtyClass(Activity.this); 
+1

謝謝。只是一個問題,但使用上述時,我得到「沒有封閉的類型活動的實例可以在範圍內訪問」。這來自擴展Activity的類。 – Joseph 2012-03-15 18:07:53

+0

首先android活動類是調用,然後你可以調用任何類wihout活動,所以沒有人在上面的代碼中的問題對我來說.... – 2012-03-15 18:09:37

+0

是不是上下文是一個非常重要的對象是這樣發佈? – Wooff 2014-08-22 11:45:43

-13

吐司消息應該在應用環境中工作,即

Toast.makeText(getApplicationContext(), ...); 
+2

如果他不在活動,那麼可能沒有getApplicationContext()方法。另外,不需要使用這種方法。活動對象本身就是一個上下文。所以使用YourActivityName.this將會正常工作,而不是getApplicationContext(); – FoamyGuy 2012-03-15 18:05:26