Beginning Android for Application - Chapter 10: Networking

Trong chương 8, bạn đã được tìm hiểu cách giao tiếp với thế giới bên ngoài sử dụng

SMS và Email. Có một cách khác để tạo mối liên kết đó là thông qua wireless network. Vì

thế chương này bạn sẽ được học cách sử dụng HTTP protocol để giao tiếp với web servers để

có thể download text và binary data. Bạn còn được tìm hiểu cách làm việc với file XML( rất

cần thiết để truy xuất vào web services). Bên cạnh đó, bạn cũng tìm hiểu JSON(JavaScript

Object Notation). Cuối cùng chúng ta sẽ tìm hiểu về TCP sockets để connect vào server.

pdf22 trang | Chuyên mục: Android | Chia sẻ: dkS00TYs | Lượt xem: 2624 | Lượt tải: 1download
Tóm tắt nội dung Beginning Android for Application - Chapter 10: Networking, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
Thangit14.blogspot.com Thangit14@gmail.com 
1 
Chương 10: Networking 
Trong chương 8, bạn đã được tìm hiểu cách giao tiếp với thế giới bên ngoài sử dụng 
SMS và Email. Có một cách khác để tạo mối liên kết đó là thông qua wireless network. Vì 
thế chương này bạn sẽ được học cách sử dụng HTTP protocol để giao tiếp với web servers để 
có thể download text và binary data. Bạn còn được tìm hiểu cách làm việc với file XML( rất 
cần thiết để truy xuất vào web services). Bên cạnh đó, bạn cũng tìm hiểu JSON(JavaScript 
Object Notation). Cuối cùng chúng ta sẽ tìm hiểu về TCP sockets để connect vào server. 
Consuming Web Services Using HTTP 
HTTP là giao tiếp thông dụng nhất trên thế giới, với nó bạn có thể thực hiện được rất 
nhiều công việc, như tải một trang web từ web server, down binary data … 
Thangit14.blogspot.com Thangit14@gmail.com 
2 
Thangit14.blogspot.com Thangit14@gmail.com 
3 
Downloading Binary Data. 
Một trong những công việc bạn hay gặp đó là tải binary dât từ web. Ví dụ như bạn 
cần tải một image từ server để hiển thị trong app. 
Thangit14.blogspot.com Thangit14@gmail.com 
4 
Thangit14.blogspot.com Thangit14@gmail.com 
5 
Để tải một bức ảnh, bạn gọi method downloadImage(). Tuy nhiên từ phiên bản 3.0 trở 
về sau, synchronous operations (hoạt động đồng bộ) không thể chạy trực tiếp từ UI thread. 
Vì phương thức downloadImage() là synchronous, vì thế nó không trả quyền điều 
khiển cho đến khi bức ảnh được tải xong – việc gọi nó trực tiếp sẽ làm đóng băng activity của 
bạn. Và điều đó không được phép từ Android 3.0 trở về sau, tất cả các synchronous code đều 
phải được bao ngoài bởi AsyncTask class. Việc sử dụng AsyncTask cho phép bạn thực hiện 
những công việc nền trong một thread riêng biệt và trả kết quả về cho UI thread. 
Nếu bạn muốn download nhiều ảnh, bạn có thể làm như sau: 
Thangit14.blogspot.com Thangit14@gmail.com 
6 
Trong ví dụ này, bạn đã gọi method publishProgress(0 để update trạng thái của tiến 
trình. Vì thế sẽ gọi đến method onProgressUpdate(), mỗi khi có một image downloaded. 
Method onProgressUpdate() được thực hiện trên UI thread, vì thế bạn có thể dùng nó để 
update ImageView với bitmap đã downloaed được. 
Ví dụ này chưa bắt lỗi khi url không phải là một ảnh. Ở link thứ 2 trong ví dụ, ko trả 
về một ảnh, nên chương trình xảy ra lỗi. Bạn xóa link thứ 2 để chạy, hoặc thêm try catch để 
bắt url ko phải là một ảnh. 
 Downloading Text Content. 
Thangit14.blogspot.com Thangit14@gmail.com 
7 
Thangit14.blogspot.com Thangit14@gmail.com 
8 
Truy cập vào Web Services sử dụng GET Method. 
Bạn sẽ thường phải download file xml từ services về và parse chúng để lấy dữ liệu. 
Trong ví dụ này, bạn sẽ sử dụng web method từ 
 . Đây là method 
dùng để giải thích một từ được lấy từ dictionary web service. 
Webservice này sử dụng request format như sau: 
Cấu trúc file xml mà nó trả về: 
Thangit14.blogspot.com Thangit14@gmail.com 
9 
Thangit14.blogspot.com Thangit14@gmail.com 
10 
Thangit14.blogspot.com Thangit14@gmail.com 
11 
Consuming JSON Services 
Việc sử dụng XML document tốn khá nhiều phép tính toán cho thiết bị là mobile bởi: 
 XML khá là dài dòng. Nó sử dụng tag để biểu diễn thông tin và có kích thước 
tăng khá nhanh. Một file XML dung lượng lớn làm cho bạn mất băng thông để 
tải nó về. 
 XML khá khó để xử lý, tính toán. 
Có một cách thích hợp để biểu diễn thông tin đó là JSON(JavaScrip Object Notation). 
JSON là một cách lưu trữ tốn ít tài nguyên và dễ dàng cho con người có thể đọc và viết. Và 
cũng dễ hơn cho thiết bị có thể làm việc với chúng. 
Thangit14.blogspot.com Thangit14@gmail.com 
12 
Thông tin được lưu trữ dưới dạng key/values, và mối cặp key/values đó được group 
trong một list các object. Không giống như XML, JSON không có tag name. 
Thangit14.blogspot.com Thangit14@gmail.com 
13 
Thangit14.blogspot.com Thangit14@gmail.com 
14 
Một ứng dụng rất hay của ví dụ này đó là sử dụng JSON để cập 
nhật status trên Twitter của bạn. 
Để làm việc đó bạn chỉ cẩn thay đổi url ở method onCreate. 
Và sau đó chỉnh sửa một chút để hiển thị ra ngoài màn hình 
trong method onPostExecute(). 
SOCKETS Programming 
Trong nhữ ví dụ trước, bạn đã sử dụng HTTP để kết nối đến server. Hầu như tất cả 
các web services đều sử dụng HTTP để giao tiếp, tuy nhiên nó lại có một nhược điểm rất lớn 
là stateless( phi trạng thái). Khi bạn connect vào một web service sử dụng HTTP, mỗi 
connection được coi như là một connection mới hoàn toàn- web server sẽ không lưu trữ các 
trạng thái của connection phía client. 
Hãy tưởng tượng trong trường hợp ứng dụng của bạn conntect vào một web service 
cho phép đặt vé xem phim. Khi ghế được đặt trên server bởi client, tất cả các client khác sẽ 
không nhận biết được điều đó cho đến khi họ connect vào web service lại để nhận về các ghế 
còn trống. Những truy vấn liên tục này bởi client sẽ chịu những bandwith không cần thiết và 
làm ứng dụng của bạn kém hiệu quả. Một giải pháp tốt hơn đó là server sẽ lưu trữ connection 
ứng với mỗi cient, và sẽ gửi một message cho chúng mỗi khi có người dùng khác đặt ghế tại 
phòng mà họ đang xem. 
Nếu bạn muốn ứng dụng của bạn lưu trữ connection và được báo khi có sự thay đổi 
phía server, bạn cần sử dụng một kỹ thuật gọi là sockets programming. Đó là kĩ thuật cho 
phép bạn sử dụng để tạo ra một connection giữa client và server. Ví dụ sau tạo ra mọt client 
app và được connect đến một socket server. Tất cả app có thể được kết nối đến server và chat 
tại cùng một thời điểm. 
Thangit14.blogspot.com Thangit14@gmail.com 
15 
Thangit14.blogspot.com Thangit14@gmail.com 
16 
Thangit14.blogspot.com Thangit14@gmail.com 
17 
Thangit14.blogspot.com Thangit14@gmail.com 
18 
Thangit14.blogspot.com Thangit14@gmail.com 
19 
Thangit14.blogspot.com Thangit14@gmail.com 
20 
Để xử lý các giao tiếp với socket, bạn tạo ra một lớp độc lập là CommsThread( 
communication Thread). Lớp này extends từ Thread class vì thế tất cả các socket đều được 
thực hiện trên một thread riêng biệt, và độc lpaajs với main UI thread. 
Trong lớp này ta định nghĩa 3 object: 
Socket object cung cấp một client-side TCP socket. 
Constructor của CommsThread cần một Socket và trả về InputStream và OutputStram 
được lấy ra từ socket connection. 
Method run() được gọi khi bạn gọi phương thức start(), luôn lắng nghe dữ liệu đến 
bằng cách đọc liên tục sử dụng InputStream object. Khi dữ liệu được nhận về, nó update UI 
của main Activity bằng cách truyền đến nó một tham số chứa trong data được gửi về. 
Thangit14.blogspot.com Thangit14@gmail.com 
21 
Phương thức write() hỗ trợ đề write dữ liệu vào socket connection: 
Và cancel() method sẽ close socket connection 
Sau đó tại activity main bạn tạo một class asynchoronously( bất đồng bộ) là 
CreateCommThreadTask. Lớp này tạo một socket connection đến server. Nội dung đầu tiên 
được gửi từ client sau khi connection được tạo ra đó chính là nickname cho client. Vì thế, sau 
khi scoket connection được started, bạn ngay lập tức gửi một message đến server chưa 
nickname mà bạn muốn sử dụng cho client. 
Class WriteToServerTask cho phép bạn gửi dữ liệu đến server một cách bất đồng bộ, 
trong khi class CloseSocketTask đóng một socket connection. 
Khi activity được pause, bạn đóng socket connection, và khi nó được resume, bạn tạo 
lại một connection . 
Thangit14.blogspot.com Thangit14@gmail.com 
22 

File đính kèm:

  • pdfBeginning Android for Application - Chapter 10 Networking.pdf