Ngoài XML, một đinh dạng dữ liệu văn bản được sử dụng rất phổ biến hiện nay trong các web service là JSON (JavaScript Object Notation).
So với XML, định dạng JSON có một số ưu điểm:
- Json có độ nén dữ liệu tốt hơn: cùng một dữ liệu, XML tốn nhiều dung lượng hơn để đóng gói, do các thẻ (tag) trong XML có độ dài nhất định. Dung lướng lớn ảnh hưởng xấu đến tốc độ truyền tải cũng như khả năng lưu trữ tài liệu.
- Xử lý (phân tích) tài liệu XML tốn kém hơn so với JSON cả về bộ nhỡ lẫn tài nguyên CPU.
Ví dụ về một tài liệu JSON ta sẽ thử phân tích trong phần tiếp theo có thể lấy được qua đường link sau: http://extjs.org.cn/extjs/examples/grid/survey.html
Ví dụ dưới đây sẽ phân tích tài liệu JSON ở trên và in ra màn hình appeId và inputTime cho từng đối tượng trong danh sách phân tích được.
Toàn bộ mã nguồn của Activity cho ví dụ này như sau:
package net.learn2develop.JSON; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpEntity;
Phát triển ứng dụng cho thiết bị di động Hồ Thị Thảo Trang 154 import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.json.JSONArray; import org.json.JSONObject; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.widget.Toast;
public class JSONActivity extends Activity { public String readJSONFeed(String URL) {
StringBuilder stringBuilder = new StringBuilder(); HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(URL);
try {
HttpResponse response = client.execute(httpGet); StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode(); if (statusCode == 200) {
HttpEntity entity = response.getEntity(); InputStream content = entity.getContent(); BufferedReader reader = new BufferedReader(
new InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line); }
} else {
Log.e("JSON", "Failed to download file"); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return stringBuilder.toString(); }
private class ReadJSONFeedTask extends AsyncTask<String, Void, String> { protected String doInBackground(String... urls) {
return readJSONFeed(urls[0]); }
protected void onPostExecute(String result) { try {
JSONArray jsonArray = new JSONArray(result); Log.i("JSON", "Number of surveys in feed: " +
jsonArray.length());
//---print out the content of the json feed--- for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i); Toast.makeText(getBaseContext(),
jsonObject.getString("appeId") +
" - " +
jsonObject.getString("inputTime"),
Toast.LENGTH_SHORT).show();
}
e.printStackTrace(); }
} }
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); new ReadJSONFeedTask().execute("http://extjs.org.cn/extjs/examples/grid/survey.ht ml"); } }
Lưu ý: trong mã nguồn trên, ta dùng lớp org.apache.http.client.HttpClient để lấy nội dung web service thông qua HTTP thay cho java.net.HttpURLConnection. Bạn đọc quan tâm có thể tự tìm hiểu về lớp này ở các tài liệu khác, ở đây ta chỉ quan tâm đến đoạn mã nguồn phân tích tài liệu JSON.
Để phân tích tài liệu JSON và đưa vào một mảng các JSONObject, ta chỉ cần gọi một lệnh đơn giản:
JSONArray jsonArray = new JSONArray(result);
Với result là dữ liệu văn bản thô (dạng String) lấy được từ webservice. Sau đó tiền hành duyệt lần lượt các JSONObject thu được bằng hàm getJSONObject(i)và lấy nội dung của từng trường dữ liệu trong mỗi đối tượng JSON bằng phương thức getString của lớp JSONObject.
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
Toast.makeText(getBaseContext(), jsonObject.getString("appeId") +
" - " + jsonObject.getString("inputTime"), Toast.LENGTH_SHORT).show();
Phát triển ứng dụng cho thiết bị di động Hồ Thị Thảo Trang
156
Chương 8. Google Play Store và việc phân phối ứng dụng
Như vậy chúng ta đã học được rất nhiều thứ xuyên suốt giáo trình giúp chúng ta có thể phát triển một ứng dụng Android chất lượng. Tuy nhiên để ứng dụng có thể được cài đặt lên thiết bị của người dùng, ta cần đóng gói và phân phối. Trong chương này chúng ta sẽ tìm hiểu cách thức đóng gói ứng dụng Android và phân phối đến máy người dùng qua các cách khác nhau, cũng như tìm hiểu cách phân phối ứng dụng Android lên chợ ứng dụng chính hãng của Google là Google Play Store.