在Java Android中获取上下文

3

嘿,我有一个安卓应用程序,在其中我在后台的线程中监视Gmail服务器...这个线程无限运行...当邮箱中收到一封邮件时,我需要弹出一个toast...但是我无法获取当前活动的上下文(因为应用程序中有多个活动)...如何获取当前运行活动或者应用程序的上下文...getApplicationcontext返回null。


该活动是否是某个TabHost的子级? - Dinesh Sharma
你能贴一些代码吗?因为如果你有一个名为ActMain的活动,然后从它调用ActMain.this或getApplicationContext(),它们应该可以工作。 - Ray Britton
4个回答

10
如果您正在运行一个ActivityService,两者本身都是Context,因此调用this就足够了。在任何监听器的回调方法中,this将指向监听器,而不是Activity。您可以使用任何View引用Context
Context context = myView.getContext();  

我不是在运行一个活动或服务,而是在运行一个单独的线程。由于这种监视需要无限运行的线程...我不能使用会阻塞前台其他活动的服务。 - user741855
但是该线程必须在某个地方启动。在您的“Runnable”类中创建一个指向原始“Activity”的字段(您可以在构造函数本身中执行此操作MyRunnable = new MyRunnable(this);)。 - Aleadam
我尝试了那个,但当我从线程中进行toast时,我会得到一个looper错误,类似于looper未准备好。 - user741855
@user,没有代码和具体错误信息,我无法做任何其他事情。 - Aleadam

3
在吐司和监听器等地方,如果您需要获取资源,您可以使用以下代码:
Resources.getSystem().getString(android.R.string.cancel)

它具有绝对的通用性,但仅支持系统资源。


2

使用 thisgetApplicationContext() 来获取当前上下文。 例如,

Context mContext=this;

或者
Context mContext=getApplicationContext();

如果该活动是某个tabHost的任何子活动,则也可以尝试使用getParent().getApplicationContext()

getApplicationContext() 对我非常有用,需要在相机 PictureTaken 监听器中使用。谢谢! - rsc

0

通过调用类名,您可以获取 Activity 的上下文。例如,如果您的 Activity 是从 MainActivity 中调用的,则可以通过输入以下内容来获取上下文:

Context context = this;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接