我在“res”文件夹中读取XML文件时遇到了一些问题,我认为我已将其缩小到我的应用活动的问题。
我在下面的第2行继续收到 NullPointerException 。
这是我获取活动的代码。有没有更好或更好的方法来做到这一点?
1. Activity activity = this;
2. Resources res = activity.getResources();
3. XmlResourceParser xpp = res.getXml(R.xml.encounters);
这是班级:
public class XmlParser extends Activity {
public XmlParser()
throws XmlPullParserException, IOException
{
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setValidating(false);
Activity activity = this;
Resources res = activity.getResources();
XmlResourceParser xpp = res.getXml(R.xml.encounters);
} catch (Exception e) {
String stackTrace = Log.getStackTraceString(e);
Log.e("error", stackTrace);
}
}
}
我在“Resources res = activity.getResources();”上收到错误线... 谢谢!
答案 0 :(得分:3)
有些东西告诉我this
或activity
存在问题,但这里缺少一些代码。您放在那里的代码不应该生成NPE,因为this
永远不会为空,如果2立即跟随1,activity
不应该为空。 this
可能不是Activity
的实例,但会产生编译错误,而不是NPE。
编辑啊,我想我看到了你的问题。您需要覆盖onCreate()
,此Activity
将由Android框架实例化。然后,您需要从构造函数中移动所有代码并将其放在onCreate
()方法中。但是,我认为这表明了对Android应用程序如何工作的基本理解。相反,我要做的是在Eclipse中创建一个标准的Android应用程序。这将为您创建一个基础活动。从那里,从Activity
类中删除子类XmlParser
并更改构造函数以获取Context
参数。从那里,实例化您的另一个XmlParser
中的Activity
,这是由Eclipse创建的Activities
。
所有这些都说,我认为你应该花一些时间阅读开发人员文档中的应用程序基础知识,以了解你应该如何访问资源等。
修改2 有关{{1}}结帐this link的详细信息。另外,请查看this SO post for how to do what you're trying to do。
答案 1 :(得分:1)
如果您在Activity类中运行该代码,那么您可以执行以下操作:
Resources res = this.getResources();
XmlResourceParser xpp = res.getXml(R.xml.encounters);