1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÁO CÁO THỰC TẬP-Chương trình sử dụng webservice lấy thông tin về tất cả thông tin động đất trên thế giới và show lên giao diện

17 378 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 17
Dung lượng 294,69 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

2.Phân tích và mô tả đề tài Đề tài sẽ thực hiện những yêu cầu sau: a.Xử lý: _Gửi requests lên service để lấy thông tin về động đất từ server về.. _Các thao tác lấy data và lưu data ở trê

Trang 1

TRUNG TÂM TIN HOC – ĐẠI HỌC KHOA HỌC TỰ NHIÊN – ĐẠI HỌC QUỐC GIA TP HỒ CHÍ

MINH

Bộ Phận Lập Trình Di Động – Lập Trình Android

Báo Cáo Tốt Nghiệp Khóa Lập Trình Android Cơ Bản

Đề Tài:

Học Viên:Nguyễn Xuân Dương Huỳnh Đức Vinh

Lớp:Android tối 2,4,6

Giáo Viên:Bùi Quốc Ánh

Trang 2

Nội Dung:

I.Giới thiệu

1.Đề tài

Chương trình sử dụng webservice lấy thông tin về tất cả thông tin động đất trên thế giới và show lên giao diện

2.Phân tích và mô tả đề tài

Đề tài sẽ thực hiện những yêu cầu sau:

a.Xử lý:

_Gửi requests lên service để lấy thông tin về động đất từ server về

_Xử lý thông tin lấy về (cắt những thông tin cần lấy bao gồm ngày, nơi, matitude ,latitude và longtitude) rồi lưu vào contentprovider

_Các thao tác lấy data và lưu data ở trên sẽ được thực hiện thông qua 1 service chạy ngầm

_Listview (main Activity)sẽ dùng để hiển thị thông tin động đất lên màn hình Listview sẽ lấy dữ liệu từ content provider

b.Chức năng:

_Khi click vào 1 row trên listview sẽ hiển thị thông tin chi tiết của trận động đất thông qua đối tượng dialog

_Khi click menu (option menu) sẽ có 2 chức năng là refresh và references .Refresh dung để load lại dữ liệu từ data lên listview Chức năng reference dung để chọn chế độ update tự động hay không và thời gian update tự động là bao lâu đồng thời hổ trợ thêm 1 filter để lọc ra những trận động đất lớn hơn giá trị đưa vào

II.Thuật toán

1.Lấy dữ liệu từ server (dưới dạng XML):

public void doRefreshEarthquakes()

{

try{

Trang 3

URL url = new URL(

"http://earthquake.usgs.gov/earthquakes/catalogs/1day-M2.5.xml");

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

DocumentBuilder db = dbf.newDocumentBuilder();

Document doc = db.parse(new InputSource(url.openStream()));

doc.getDocumentElement().normalize();

NodeList nodeList = doc.getElementsByTagName("entry");

//Log.i("test",);

/** Assign textview array lenght by arraylist size */

for (int i = 0; i < nodeList.getLength(); i++) {

Node node = nodeList.item(i);

Element fstElmnt = (Element) node;

NodeList idList = fstElmnt.getElementsByTagName("georss:point"); Element idElement = (Element) idList.item(0);

idList = idElement.getChildNodes();

String point=((Node)idList.item(0)).getNodeValue();

String[] location = point.split(" ");

Location l = new Location("dummyGPS");

l.setLatitude(Double.parseDouble(location[0]));

l.setLongitude(Double.parseDouble(location[1]));

NodeList titleList = fstElmnt.getElementsByTagName("title"); Element titleElement = (Element) titleList.item(0);

titleList = titleElement.getChildNodes();

String details=((Node) titleList.item(0)).getNodeValue();

String magnitudeString = details.split(" ")[1];

int end = magnitudeString.length()-1;

double magnitude =

Double.parseDouble(magnitudeString.substring(0, end));

details = details.split(",")[1].trim();

NodeList dateList = fstElmnt.getElementsByTagName("updated");

Element dateElement = (Element) dateList.item(0); dateList = dateElement.getChildNodes();

String dd=((Node)dateList.item(0)).getNodeValue();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss'Z'");

Date qdate = new GregorianCalendar(0,0,0).getTime();

try { qdate = sdf.parse(dd);

} catch (ParseException e) { e.printStackTrace();

} NodeList linkList = fstElmnt.getElementsByTagName("link");

Element linkElement = (Element) linkList.item(0);

linkList = linkElement.getChildNodes();

Trang 4

String link1=linkElement.getAttribute("href");

Quake quake=new Quake(qdate, details, l,magnitude, link1);

//lay 1 doi tuong moi ve

addNewQuake(quake);

} } catch (Exception e) { System.out.println("XML Pasing Excpetion = " + e);

Log.i("test", "null pointer");

}

}

II.Thực hiện

1.Code chương trình

a.Sơ đồ tổng quát

Option Menu

loadQuakesFromProvider() lọc thông qua reference

bắn lên Intent

lưu data

ListView

(Main Activity)

References

(atoupdate và filter theo matitude)

Trang 5

Send get

b.Code

Ở đây sẽ trình bày theo từng lớp và sau đó là mối liên kết giữa chúng b.1Các lớp

_Quake class: là 1 đối tượng lưu các thông tin của 1 đối tượng Quake bao gồm: date(kiểu date time),longtitude(long),latitude(long),matitude(long),

area(String)

private Date date ;

private String details ;

private Location location ;

private double magnitude ;

private String link ;

_EarthQuake2011V1Activity class: là một main Activity dùng để hiển thị thông tin của Quakes lên màn hình

EarthQuake2011V1Activity

_updateData()

+Start service

_updateFromReference()

+Lấy các thông số lưu vào references trong lớp Reference để filter ,xử lý

Internet

Qake

Trang 6

+add 1 đối tượng quake vào earthquakes array

_loadQuakeFromProvider()

+Lấy dữ liệu từ provider lên theo từng row rồi đổ vào đối tượng quake(1 row trong provider sẽ được lưu vào 1 quake )tiếp đó là add quake vào quakes array (thông qua hàm addQuakeToArray())

_EarthQuakeBroadCastReceiver class:lớp này này kế thừa từ BroadcastReceiver dùng để bắt lấy intent bắn lên từ sevice khi có 1 quakes mới được update

Ngoài các phương thức trên thì lớp này còn override lại 1 số phương thức của

Activity để tạo option menu,và dialog

_EarthQuakeProvider class:lớp này kế thừa từ Contentprovider class dùng

để tạo database và cung cấp 1 số phương thức để thao tác dữ liệu

// Column Names

public static final String KEY_ID = "_id";

public static final String KEY_DATE = "date";

public static final String KEY_DETAILS = "details";

public static final String KEY_LOCATION_LAT = "latitude";

public static final String KEY_LOCATION_LNG = "longitude";

public static final String KEY_MAGNITUDE = "magnitude";

public static final String KEY_LINK = "link";

private static final String DATABASE_CREATE =

"create table " + EARTHQUAKE_TABLE + " ("

+ KEY_ID + " integer primary key autoincrement, "

+ KEY_DATE + " LONG, "

+ KEY_DETAILS + " TEXT, "

+ KEY_LOCATION_LAT + " FLOAT, "

+ KEY_LOCATION_LNG + " FLOAT, "

+ KEY_MAGNITUDE + " FLOAT, "

+ KEY_LINK + " TEXT);";

@Override

public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sort) {

}

@Override

public Uri insert(Uri _uri, ContentValues _initialValues) {

}

@Override

Trang 7

public int delete(Uri uri, String where, String[] whereArgs) {

}

@Override

public int update(Uri uri, ContentValues values, String where, String[] whereArgs) {

}

_ EarthQuakeService class:kế thừa từ lớp Sevice chạy ngầm gửi request và

lấy data từ server.Sau đó lưu dữ liệu xuống provider

EarthQuakeService

_refreshEarthquakes()

+Start 1 new thread thực thi hàm bachgroundRefresh()

_backgroundRefresh() là 1 Runable

+Override hàm void run() và thực thi phương thức doFreshEarthQuakes() _TimerTask doRefresh()

+Thực thi phương thức refreshEarthquakes() trong hàm run

_onStart()

+ Các hàm trên sẽ được sử dụng khi ta chọn chế độ auto update trong

References.Nếu không update tự động thì sẽ gọi hàm doRefreshEarthQuake() _doRefreshEarthQuake():

+Sẽ thực hiện kết nối với server để lấy dữ liệu về sau khi lấy về sẽ đổ dữ liệu vào đối tượng Quake rồi add vào provider

_addNewQuake()

+Hàm này dùng để add dữ liệu vào provider

_announceNewQuake()

+Hàm này sẽ được bắn lên nếu có 1 quake mới được lưu vào provider

+Trong hàm này ta thực thi 1 status notification để khi có 1 quake mới được cập nhật thì status này sẽ bắn lên thông báo cho người dùng biết

2.Giao diện

a.Màn hình chính: sẽ hiển thị danh sách các earthquakes

Trang 10

b.EarthQuake details:khi click vào 1 row trên listview sẽ hiển thị dialog để show details

Trang 11

c.Option Menu: gồm 2 chức năng là refresh và reference.Refresh sẽ load lại data từ provider.Còn Reference thì sẽ set các chết độ auto update và filter theo matitude

Trang 13

*Reference

Trang 15

*Màn hình sau khi filter với matitude bằng 5:

Trang 17

III.Kết luận

1.Những cái đã làm được

_Tạo service chạy dưới background để lấy dữ liệu về.Service còn hổ trự chức năng autoupdate,sau 1 khoảng thời gian được set trước đó service sẽ thực thi phương thức lấy các thông tin trận động đất mới về và lưu vào content provider

_Tạo 1 Provider để lưu dữ liệu lấy về vào đó

_Reference là 1 activity dùng để set các thông tin như có auto update hay không và chọn giá trị của matitude để hiển thị danh sách earthquake

_Main Activity kế thừa từ listActivity dùng để hiển thị danh sách

earthquakes Khi click vào 1 row sẽ hiển thị thông tin chi tiết cảu trận động đất như ngày giờ,địa chỉ trang detail để người dùng có thể lên trang chủ xem thông tin details

2.Cái chưa làm được

_Map dùng để hiển thị vị trí xãy ra trận động đất chưa làm được

_Khi filter với matitude bằng 6 hay 7 thì chương trình bị crash Lý do là không có trận động đất nào trong list thõa diều kiện đó nên mảng chứa các quake

sẽ rỗng

_Giao diện chưa tốt lắm

Ngày đăng: 17/05/2015, 11:27

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w