2011-06-01 31 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/

希望這可能有所幫助。