마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 XML을 파싱하여 리스트뷰에 표현하고싶습니다..

0 추천

파싱하고자하는 소스는 res/xml에 있으며 소스는 다음과 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<custom_list>
    <custom>
        <name>item1</name>
        <address>1</address>
    </custom>
    <custom>
        <name>item2</name>
        <address>2</address>
    </custom>
    <custom>
        <name>item3</name>
        <address>3</address>
    </custom>
    <custom>
        <name>item4</name>
        <address>4</address>
    </custom>
    <custom>
        <name>item5</name>
        <address>5</address></custom>
</custom_list>

위와 같은소스를 파싱하여 리스트뷰로 표현하고싶은데

package com.example.parser;

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;

public class MainActivity extends Activity {

    ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = (ListView) findViewById(R.id.listView);

        ArrayList<String> items = new ArrayList<String>();
        try{
            XmlPullParser customList = getResources().getXml(R.xml.custom_list);
            while(customList.getEventType()!=XmlPullParser.END_DOCUMENT){
                if(customList.getEventType()==XmlPullParser.START_TAG){
                    if(customList.getName().equals("custom")){
                        if(customList.getName().equals("name")){
                            //리스트뷰로 얻어오는방법 모르겠습니다
                            if(customList.getName().equals("address")){
                                //리스트뷰로 얻어오는 방법 모르겠습니다
                            }
                        }
                    }
                }
                customList.next();
            }
        }catch (XmlPullParserException e){
            e.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();
        }
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, items);
        ListView listView = (ListView)findViewById(R.id.listView);
        listView.setAdapter(adapter);
    }
}

메인소스를 위와같이 일단은 자료를 참고하여 작성하였습니다, 그런데 대부분 xml에서 value 값을 바로 읽어오다보니 제가 하고자하는 방향과는 다른거같아 listview에 xml 내용이 나오질 않습니다.ㅠㅠ

위와같은 소스에서 xml에 있는 내용을 어떻게 가져와야 하는지 알려주세요 ㅠㅠ 감사합니다

 

 

익명사용자 님이 2016년 9월 7일 질문

1개의 답변

0 추천
 
채택된 답변
public class CustomItem {
    public String name;
    public String address;
}

public class MainActivity extends Activity {

    ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = (ListView) findViewById(R.id.listView);
        ArrayList<CustomItem> items = new ArrayList();
        
        try{
            XmlPullParser customList = getResources().getXml(R.xml.custom_list);
            while(customList.getEventType()!=XmlPullParser.END_DOCUMENT){  
                CustomItem item = null;
                if(customList.getEventType()==XmlPullParser.START_TAG){
                    if(customList.getName().equals("custom")){
                        String keyName = customList.getName();
                        if("name".equals(keyName)){
                            if (item == null) item  = new CustomItem();
                            item.name = customList.getValue(keyName); //정확한 메소드를 모르겠네요. 이 부분을 확인해 보세요.
                           
                            keyName = customList.getName();
                            if("address".equals(keyName)){
                               item.address = customList.getValue(keyName);
                            }
                              
                           items.add(item);
                        }
                    }
                }
                customList.next();
            }
        }catch (XmlPullParserException e){
            e.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();
        }
        
        //이부분을 요구사항에 따라 CustomAdapter를 사용해서 CustomItem 을 display할 수 있도록 하시거나 
       //CustomItem ArrayList를 String Array로 바꾸어서 넘겨 주세요.
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, items);
        ListView listView = (ListView)findViewById(R.id.listView);
        listView.setAdapter(adapter);
    }
}

급하게 만든 코드이므로 완벽하지 않습니다. 테스트 하시면서 수정하시기 바래요.

익명사용자 님이 2016년 9월 7일 답변
직접해주셔서 정말~ 감사합니다 ㅎㅎ
...