2012-01-04 23 views
1

'this'关键字只在我的应用程序主要java文件onCreate方法中有效吗?'这个'关键字在另一个类文件中使用

如果我尝试在其他地方使用'this',最终会出现nullPointerException错误。

例如,工作版本:

public class HelloAndroid extends Activity { 

public void onCreate(Bundle icicle) { 

    super.onCreate(icicle); 
    XmlParser xmlParse = new XmlParser(); 
    encounterText = xmlParse.parseXML(this); 

} 

但如果我尝试和我的应用程序中使用“这”在不同的Java类文件,我得到的NPE。

谢谢

+0

您能否为NPE包含堆栈跟踪和代码示例? – elijah 2012-01-04 18:20:01

+0

你可以发表一个你得到例外的例子吗? – 2012-01-04 18:20:03

+0

这可能不是'this',它是空的。看[这个问题](http://stackoverflow.com/q/3789528/324625)。正如其他人所说,张贴破解的代码,而不是可用的代码。 – 2012-01-04 18:27:39

回答

1

我想你在问什么(纠正我,如果我错了)是为什么'这'不作为需要参考上下文的方法的参数。答案是,这只涉及扩展Activity的类中的Context。你的活动恰好也是你的上下文,所以这在这些实例中起作用。但是,当你声明你自己的类时,你不再处于Activity中,所以'this'(虽然它明显指向你所在的类)并不能帮助你获得对Context的引用。

在这些情况下,您需要将您的上下文作为参考传递给您的类构造函数,以便它可以访问该对象。

+0

我不明白如何将一个非'Context'传递给期望'Context'的东西会给NPE。 'ClassCastException'也许...... – 2012-01-04 18:35:24

1

'this'指的是类的实例。这不是特定的onCreate方法

+0

如果以静态方法使用它,则会导致编译时失败。 – 2012-01-04 18:21:59

+0

在静态方法中使用'this'不应该编译。 – Argyle 2012-01-04 18:22:11

1

每个类实例都有相应的'this'引用。 '这个'真的意味着你在HelloAndroid实例中声明的类的实例。在你的例子中,你使用的是同一个类作为解析处理程序,这就是为什么它正在工作,在另一个可能有DefaultHandler定义的类中。

相关问题