Học liệu
XÂY DỰNG ỨNG DỤNG PHÂN LẤY VÀ PHÂN DÍCH DỮ LIÊU TỪ FILE XML
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:
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:
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
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
ArrayList
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
lv1.setAdapter(myadapter);
btnparse.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LoadExampleTask task = new LoadExampleTask();
task.execute();
}
});
}
class LoadExampleTask extends AsyncTask
{
@Override
protected ArrayList
{
ArrayList
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
// 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 -----------------