Android:将.xml资源添加到数组中

时间:2011-06-01 01:15:33

标签: java android xml

更新:

所以我尝试了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();
            }           
...
...

现在这段代码在xrp是XmlResourceParser时工作正常,但现在我收到此错误消息:

06-01 05:13:56.797: ERROR/AndroidRuntime(946): Caused by: java.lang.NullPointerException
06-01 05:13:56.797: ERROR/AndroidRuntime(946):     at com.stickfigs.blockball.BlockBallView$BlockBallThread.initLevel(BlockBallView.java:342)

我不明白为什么这不再起作用了,我用箭头标记了上面代码中发生nullpointerexception的行。

=== vvvOLDvvv ===

在我的res / xml /文件夹中,我有一堆名为level _#。xml的文件(例如:level_1.xml,level_2.xml,level_21.xml),我有一个微调器小部件,我想用id填充此文件夹中所有.xml文件的名称,遵循命名约定级别_#。xml,仅包含那些。

我想我想出了如何设置小部件:

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);

现在我只需动态生成level []就像我之前解释过的那样......

我该怎么做?

3 个答案:

答案 0 :(得分:1)

直截了当的答案是

String[] levels = new String[LEVELS];
for (int i=0; i< LEVELS; i++) {
    int j = i+1;
    levels[i] = new String ("level_"+j);
}

但我觉得那不是你想要的。

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

答案 1 :(得分:1)

由于上一个问题已经解决,我认为最好再创建一个让人们帮助你的问题。但是,为方便起见,请允许我在这里回答你。

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

顺便说一句,我看到你在android中的xml中苦苦挣扎,我建议你使用一些可以让生活更轻松的ext库。像这样:http://brainflush.wordpress.com/2009/05/19/the-force-unleashed-xmlxpath-on-android-using-dom4j-and-jaxen/

希望这可能会有所帮助。

答案 2 :(得分:0)