Học liệu

XÂY DỰNG ỨNG DỤNG VỚI PARSE XML

  • 19/05/2019
  • Học liệu

I. Mục tiêu

Giúp sinh viên hiểu rõ và lập trình với các thành phần

Parse XLM với phương pháp SAX

Kết nối với Webservice

Làm việc với Đa tiến trình ArsynTask

II. Nội dung

1. Yêu cầu: Thực hiện kết nối lên url https://api.androidhive.info/pizza/?format=xml, phân tích và lấy dữ liệu, sau đó hiển thị lên Listview như sau:
undefined

2. Các bước thực hiện:

Bước 1: Tạo project mới và xây dựng giao diện activity_main.xml như sau:

undefined 

Bước 2: Khai báo sử dụng thư viện apache

Vào mục Gradle Scrips/ bulid.gradle(module:app), copy dòng khai báo sau vào

undefined 

Bước 3: Xây dựng lớp XMLParser để tạo kết nối lên Server và nhận dữ liệu XML

ublic class XMLParser {

    public String getXmlFromUrl(String url) {
        String xml = null;

        try {
            //Tạo đối tượng Client và tạo Http Connetction
           
DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
            //Tiến hành Request lên server và nhận đáp ứng Response
           
HttpResponse httpResponse = httpClient.execute(httpPost);
            //Lấy các Thực thể trong đáp ứng Response chuyển qua kiểu String và gắn vào file xml
            
HttpEntity httpEntity = httpResponse.getEntity();
            xml = EntityUtils.toString(httpEntity);

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // return XML
       
return xml;
    }
}

Bước 4: Code cho lớp MainActivity.java

public class MainActivity extends Activity {

    Button btnparse;
    ListView lv1;
    ArrayAdapter<String> myadapter;
    ArrayList<String> mylist;
    String URL= "https://api.androidhive.info/pizza/?format=xml";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnparse=(Button) findViewById(R.id.btnparse);
        lv1= (ListView) findViewById(R.id.lv1);
        mylist = new ArrayList<>();
        myadapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,mylist);
        lv1.setAdapter(myadapter);
        btnparse.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LoadExampleTask task = new LoadExampleTask();
                task.execute();
            }
        });

    }
    class LoadExampleTask extends AsyncTask<Void, Void,  ArrayList<String>>
    {
        @Override
        protected ArrayList<String> doInBackground(Void... voids)
        {
            ArrayList<String> list = new ArrayList<String>();
            try {
               // Tạo đối tượng Parser để chứa dữ liệu từ file XML
               
XmlPullParserFactory fc=XmlPullParserFactory.newInstance();
                XmlPullParser parser= fc.newPullParser();
                //Tạo mới và gọi đến phương thức getXmlFromUrl(URL)
               
XMLParser myparser = new XMLParser();
                String xml = myparser.getXmlFromUrl(URL); // getting XML from URL
                //Copy dữ liệu từ String xml vào đối tượng parser
               
parser.setInput(new StringReader(xml));
                //Bắt đầu duyệt parser
               
int eventType=-1;
                String nodeName;
                String datashow="";
                while(eventType!=XmlPullParser.END_DOCUMENT)
                {
                    eventType=parser.next();
                    switch(eventType)
                    {
                        case XmlPullParser.START_DOCUMENT:
                            break;
                        case XmlPullParser.END_DOCUMENT:
                            break;
                        case XmlPullParser.START_TAG:
                            nodeName=parser.getName();
                            if(nodeName.equals("id")){
                                datashow+=parser.nextText()+"-";
                            }
                            else if(nodeName.equals("name")){
                                datashow+=parser.nextText();
                            }
                            break;
                        case XmlPullParser.END_TAG:
                            nodeName=parser.getName();
                            if(nodeName.equals("item")){
                                list.add(datashow);
                                datashow="";
                            }
                            break;
                    }
                }
            } catch (XmlPullParserException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return list;
        }
        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
           
super.onPreExecute();
            myadapter.clear();
        }
        @Override
        protected void onPostExecute(ArrayList<String> result) {
            // TODO Auto-generated method stub
           
super.onPostExecute(result);
            myadapter.clear();
            myadapter.addAll(result);
        }

        @Override
        protected void onProgressUpdate(Void... values) {
            // TODO Auto-generated method stub
           
super.onProgressUpdate(values);
        }
    }
}

Bước 5: Khai báo quyền truy cập Internet trong file AndroidMainifest

 

<uses-permission android:name="android.permission.INTERNET"/>

 

 

---------------------END -----------------

Các tin khác