Sử dụng web services thông qua giao thức HTTP

Một phần của tài liệu Bài giảng phát triển ứng dụng cho thiết bị di động hồ thị thảo trang (Trang 142)

Cách thức phổ biến nhất để cập nhật dữ liệu trực tuyến là lấy dữ liệu từ trang web trên Internet thông qua giao thức HTTP. Sử dụng giao thức này, ta có thể thực hiện rất nhiều việc trao đổi dữ liệu với thế giới bên ngoài, từ việc lấy nội dung trang web, tải dữ liệu nhị phân (file nhị phân, ảnh…), tải dữ liệu dạng văn bản…

Về mặt network, các thao tác này là như nhau cho mọi loại dữ liệu tải về, vì vậy trước tiên ta tạo một dự án khung cho các ứng dụng sử dụng tài nguyên mạng theo giao thức HTTP.

Trước hết, ta cần yêu cầu quyền truy cập Internet cho ứng dụng một cách tường mình trong file AndroidManifest.xml như sau:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="net.learn2develop.Networking"

android:versionCode="1"

android:versionName="1.0" >

<uses-sdk android:minSdkVersion="13" />

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

<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".NetworkingActivity" > <intent-filter >

<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>

Sau đó, trong mã nguồn của Activity chính, ta viết thêm một hàm để lấy dữ liệu từ trên mạng về qua giao thức HTTP. Kết quả của việc lấy dữ liệu này sẽ cho ta một luồng nhập liệu

(InputStream) để ta xử lý dữ liệu (việc lấy dữ liệu ra loại gì – nhị phân hay văn bản sẽ do luồng nhập liệu này xử lý).

Mã nguồn của Activity ban đầu sẽ như sau:

public class NetworkingActivity extends Activity {

private InputStream OpenHttpConnection(String urlString) throws IOException

{

InputStream in = null; int response = -1;

URL url = new URL(urlString);

URLConnection conn = url.openConnection();

if (!(conn instanceof HttpURLConnection)) throw new IOException("Not an HTTP connection"); try{

HttpURLConnection httpConn = (HttpURLConnection) conn; httpConn.setAllowUserInteraction(false);

httpConn.setInstanceFollowRedirects(true); httpConn.setRequestMethod("GET");

httpConn.connect();

response = httpConn.getResponseCode(); if (response == HttpURLConnection.HTTP_OK) {

in = httpConn.getInputStream(); }

}

catch (Exception ex) {

Log.d("Networking", ex.getLocalizedMessage()); throw new IOException("Error connecting"); }

return in; }

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.main); }

}

Hàm OpenHttpConnection ở trên nhận vào đường link đến tài nguyên trên Internet, thực hiện kết nối và trả dữ liệu về vào luồng nhập liệu (InputStream). Do việc làm việc với tài nguyên mạng thường xảy ra lỗi (không kết nối được, link không còn tồn tại...), toàn bộ đoạn mã cho việc này nằm trong bộ xử lý nhận ngoại lệ try-catch để bắt các lỗi có thể xảy ra.

Lưu ý là việc kết nối đến máy chủ để lấy tài nguyên có thể kéo dài, tùy thuộc vào kích thước tài nguyên, tốc độ đường truyền, khả năng xử lý của thiết bị... Vì vậy hàm trên thường được gọi trong thread riêng để tránh việc khóa cứng giao diện người dùng trong quá trình xử lý. Ta sẽ làm việc này trong các ví dụ cụ thể bên dưới về việc tải dữ liệu nhị phân cũng như tải dữ

Phát triển ứng dụng cho thiết bị di động Hồ Thị Thảo Trang

144

Một phần của tài liệu Bài giảng phát triển ứng dụng cho thiết bị di động hồ thị thảo trang (Trang 142)

Tải bản đầy đủ (PDF)

(169 trang)