2011-06-01 81 views
2

UPDATE:安卓:添加.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 /文件夹,我有一堆所谓的水平_#文件的XML格式。(例如:level_1.xml,level_2.xml,level_21.xml)和我有一个微调控件,我想用这个文件夹中的所有.xml文件的id名称来填充命名约定级别_#。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); 

现在我只需要一个像我以前解释产生水平[] ...动态

我如何去这样做这个?

回答

0

看一看AssetManager:http://developer.android.com/reference/android/content/res/AssetManager.html#list(java.lang.String)

然后你就可以新建一个文件输出,getName() 链接:http://developer.android.com/reference/java/io/File.html#getName()

希望这有助于。

+0

你能稍微详细解释一下这个过程吗?我不知道该怎么做。 – 2011-06-01 03:55:43

+0

当然@StickFigs,请允许我在今天下午开始工作,因为我目前在工作。 – ThinkChris 2011-06-01 04:30:23

+0

没关系我知道了,但现在我有一个新问题(更新了问题) – 2011-06-01 05:21:01

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并没有即使这些名称,以确保连续的编号为他们(没有可能的方式使用是连续的)。

+0

“没有可能的方法来确保连续编号(即使您使用的名称是连续的)”好的说。不仅如此,而且这些级别应该位于资产目录中,而不是res/xml ......当我开始设置关卡时,我犯了这个错误。 – 2011-06-01 02:13:26

+0

他们为什么应该在资产目录中?让他们在res/xml似乎对我来说工作得很好。 – 2011-06-01 03:53:43

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/

希望这可能有所帮助。