現在、Android アプリケーションを作成しています。ユーザーが選択するリストがあり、横に各項目の画像が必要です。リスト用のアダプターと、リスト用の別の list_row レイアウトを作成しました。
リストの実際のデータはローカルの res/xml/data.xml に保存され、以下のようになります。
<dataset>
<data>
<name>all</name>
<image>all</image>
</data>
<data>
<name>car</name>
<image>car</image>
</data>
</dataset>
このリストのメイン アクティビティでは、ローカル ソースから XML データを解析し、それを文字列として Document 要素に渡し、データを処理しようとしました。問題をデバッグしたところ、設定されている文字列が空であるため、以下の行が機能していないことがわかりました。
XmlResourceParser parserXml = getResources().getXml(R.xml.data);
String xmlString = parserXml.getText();
データを解析するための完全なコードは次のとおりです。
XmlResourceParser parserXml = getResources().getXml(R.xml.dresses);
String xmlString = parserXml.getText(); // getting XML from URL
XMLParser parser = new XMLParser();
Document doc = parser.getDomElement(xmlString); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_DATA);
for (int i = 0; i < nl.getLength(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element) nl.item(i);
map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
map.put(KEY_IMAGE, parser.getValue(e, KEY_IMAGE));
dataInfo.add(map);
}
誰でもこれで私を助けてくれませんか、事前に感謝します:)
編集.....
また、XmlPullParser メソッドを提案どおりに使用しようとしましたが、String が null であるという同じ問題が引き続き発生します。私が使用したコードは以下のとおりです。
XmlPullParser xpp = this.getResources().getXml(R.xml.data);
String xmlString1 = xpp.getText();
これが役立つ場合は、以下のファイル全体を含めました。
public class Dresses extends Activity {
static final String KEY_DATA = "dress"; // parent node
static final String KEY_NAME = "name";
static final String KEY_IMAGE = "image";
ListView list;
ItemTypeAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ArrayList<HashMap<String, String>> itemTypes = new ArrayList<HashMap<String, String>>();
XmlPullParserFactory factory;
try {
factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
} catch (XmlPullParserException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
XmlPullParser xpp = this.getResources().getXml(R.xml.data);
String xmlString1 = xpp.getText();
Log.d("Testing Type List Data: ", xmlString1);
XmlResourceParser parserXml = getResources().getXml(R.xml.data);
String xmlString = parserXml.getText(); // getting XML from URL
Log.d("Type List Data: ", xmlString);
XMLParser parser = new XMLParser();
Document doc = parser.getDomElement(xmlString); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_DATA);
for (int i = 0; i < nl.getLength(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element) nl.item(i);
map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
map.put(KEY_IMAGE, parser.getValue(e, KEY_IMAGE));
itemTypes.add(map);
}
list=(ListView)findViewById(R.id.list);
// Getting adapter by passing xml data ArrayList
adapter=new ItemTypeAdapter(this, itemTypes);
list.setAdapter(adapter);
// listening to single list item on click
list.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// selected item
String type = ((TextView) view).getText().toString();
// Launching new Activity on selecting single List Item
Intent i = new Intent(getApplicationContext(), ItemListActivity.class);
// sending data to new activity
i.putExtra("type", type);
startActivity(i);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.data, menu);
return true;
}
}