Java Android:向数组中添加.xml资源

Java Android:向数组中添加.xml资源,java,android,xml,Java,Android,Xml,更新: 因此,我尝试了AssetManager方法,结果是: ... ... XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); factory.setNamespaceAware(true); XmlPullParser xrp = factory.newPullParser(); AssetManager assmgr = context.getAssets(); xrp.setInput(assmgr.o

更新:

因此,我尝试了AssetManager方法,结果是:

...
...
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xrp = factory.newPullParser();

AssetManager assmgr = context.getAssets();

xrp.setInput(assmgr.open("levels/level_1.xml"), null);

//Object attributes
String type = null;
int x = 0;
int y = 0;
double angleRads = 0;

int eventType = xrp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
    if (eventType == XmlPullParser.START_DOCUMENT) {
    } else if (eventType == XmlPullParser.START_TAG) {
        if (xrp.getName().equals("Position")) {
            while (!xrp.getName().equals("X")) {  <----NULLPOINTER EXCEPTION HERE
                eventType = xrp.next();
            }           
...
...
我不明白为什么这不再有效,我用箭头标记了上面代码中发生nullpointerexception的行

===vvvOLDvvv===

在我的res/xml/文件夹中,我有一堆名为level##.xml(例如:level_1.xml、level_2.xml、level_21.xml)的文件,我有一个微调器小部件,我想用这个文件夹中所有遵循命名约定level##.xml的.xml文件的id名填充它,并且只填充这些文件

我想我知道了如何设置小部件:

Spinner lsSpinner = (Spinner) findViewById(R.id.levelselect_spinner);

String levels[] = {"level_1","level_2","level_55"};

ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, levels);
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
lsSpinner.setAdapter(spinnerArrayAdapter);
Spinner lsSpinner=(Spinner)findViewById(R.id.levelselect_Spinner);
字符串级别[]={“级别1”、“级别2”、“级别55”};
ArrayAdapter spinnerArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u微调器项目,级别);
spinnerrayadapter.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
lsSpinner.setAdapter(spinnerrayadapter);
现在我只需要像我之前解释的那样动态生成levels[]


如何执行此操作?

请查看AssetManager:

然后您可以创建一个新文件和getName() 链接:


希望这能有所帮助。

简单的答案是

String[] levels = new String[LEVELS];
for (int i=0; i< LEVELS; i++) {
    int j = i+1;
    levels[i] = new String ("level_"+j);
}
String[]levels=新字符串[levels];
对于(int i=0;i
但我觉得那不是你想要的


如果要引用每个
level_XX.xml
的实际ID,则需要手动执行,因为每个
R.layout.levelXX
都是一个实际的
int
,并且没有可能的方法确保它们的连续编号(即使使用的名称是连续的)

既然上一个问题已经解决了,我认为最好再提出一个问题,让大家来帮助你。但为了方便起见,请允许我在这里回答你

如果xrp.getName()永远不会等于“X”,您会怎么想?xrp会转到下一个直到null吗?我建议你在这里设置一个断点并进行检查

顺便说一句,我看到您在android中使用xml时遇到了困难,我建议您使用一些ext库,这可能会让您的生活更轻松。像这样:


希望这能有所帮助。

“没有可能的方法确保它们的连续编号(即使您使用的名称是连续的)”,说得很好。不仅如此,这些级别应该在assets目录中,而不是res/xml…我在放置级别时犯了这个错误。为什么它们应该在assets目录中?把它们放在res/xml中对我来说似乎很好。你能更详细地解释一下这个过程吗?我不知道该做什么。当然@StickFigs,请允许我在今天下午做,因为我目前正在工作。尽管我得到了它,但现在我有一个新问题(更新了问题)
String[] levels = new String[LEVELS];
for (int i=0; i< LEVELS; i++) {
    int j = i+1;
    levels[i] = new String ("level_"+j);
}