1

現在、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;
    }

}
4

1 に答える 1