2012-03-15 65 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