Bài 11: Xử Lý JSON Trong Android - Programming Tutorial

Programming Tutorial Được tạo bởi Blogger.

HTML/CSS

tiện ích HTML css

Tổng số lượt xem trang:

Danh sách các chuyên mục

  • Android (38)
  • C (15)
  • Java_Basic (23)
  • Test (1)
  • Utity (2)

Các chuyên mục chính

Android Java_Basic

Tìm kiếm nội dung bài viết:

Bài 11: Xử lý JSON trong Android

8/25/2015 08:47:00 SA Nội dung: - Định dạng JSON - Đọc json - Đọc tệp tin json từ internet --------------------------- 1. Định dạng JSON - JSON (JavaScript Object Notation) được định nghĩa dữ theo ngôn ngữ JavaScript, tiêu chuẩn ECMA-262 năm 1999, cấu trúc là một định dạng văn bản đơn giản với các trường dữ liệu được lồng vào nhau. - Ví dụ về 1 định dạng JSON: - Việc đọc và ghi định dạng JSON được tích hợp sẵn trong Android SDK (dùng thư viên org.json.*) : + JSONObject: đối tượng quản lý JSON ở dạng một Object. + JSONArray: đối tượng quản lý JSON ở dạng tập mảng. 2. Đọc JSON: Các bước cơ bản đọc định dạng JSON vào mảng: //1. Khai báo đối tượng json root object JSONObject jsonRootObject = new JSONObject(jsonStr); //2. Đưa jsonRootObject vào array object JSONArray jsonArray = jsonRootObject.optJSONArray("Employee"); // //3. Duyệt từng đối tượng trong Array và lấy giá trị ra for(int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i);//lấy từng đối tượng ra String value = jsonObject.optString("key_name").toString());// //... } Ví dụ: Đọc và hiển thị một chuỗi định dạng JSON lên textview Cho chuỗi JSON như ở ví dụ trên: String jsonStr = "{" + "\"Employee\": [" + "{" + "\"id\":\"01\"," + "\"name\":\"Nguyen Van A\"," + "\"salary\":\"1000\"" + "}," + "{" + "\"id\":\"02\"," + "\"name\":\"Nguyen Van B\"," + "\"salary\":\"2000\"" + "}," + "{" + "\"id\":\"03\"," + "\"name\":\"Nguyen Van C\"," + "\"salary\":\"3000\"" + "}" + "]" + "}"; Kết quả đọc lên textview: Dùng một textview để hiển thị kết quả Code java: trong hàm onCreate TextView tv_display = (TextView) findViewById(R.id.textview_display); String jsonStr = "{" + "\"Employee\": [" + "{" + "\"id\":\"01\"," + "\"name\":\"Nguyen Van A\"," + "\"salary\":\"1000\"" + "}," + "{" + "\"id\":\"02\"," + "\"name\":\"Nguyen Van B\"," + "\"salary\":\"2000\"" + "}," + "{" + "\"id\":\"03\"," + "\"name\":\"Nguyen Van C\"," + "\"salary\":\"3000\"" + "}" + "]" + "}"; String data =""; try { //1. Khai báo đối tượng json root object JSONObject jsonRootObject = new JSONObject(jsonStr); //2. Đưa jsonRootObject vào array object JSONArray jsonArray = jsonRootObject.optJSONArray("Employee"); // //3. Duyệt từng đối tượng trong Array và lấy giá trị ra for(int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); int id = Integer.parseInt(jsonObject.optString("id").toString()); String name = jsonObject.optString("name").toString(); int salary = Integer.parseInt(jsonObject.optString("salary").toString()); data += id + ", " + name + ", " + salary + "\n"; } } catch (JSONException e) { e.printStackTrace(); } tv_display.setText(data); Link download bài này: https://drive.google.com/file/d/0B8tAQ0_sJKCSbGd6OHBqRE93Z0U/view?usp=sharing 3. Đọc tệp tin json từ internet - Dùng link: http://myjson.com/ để lưu trữ chuỗi JSON lên internet, bấm nut save để lấy link. Ví dụ link sau: https://api.myjson.com/bins/35zd8 - Dùng link: http://jsonlint.com/ để kiểm tra chuỗi JSON có đúng cú pháp hay không. - Kết quả đọc chuỗi JSON trên: Về giao diện tạo textview để hiển thị nội dung JSON. Tệp tin AndroidManifest.xml: <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> Mã nguồn Java gồm 2 tệp tin: HttpAsyncTask.java kế thừa từ lớp AsyncTask và tệp tin MainActivity.java Mã nguồn HttpAsynsTask.java: package com.readjsonfromurl; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import android.app.Activity; import android.os.AsyncTask; import android.util.Log; import android.widget.TextView; import android.widget.Toast; publicclass HttpAsyncTask extends AsyncTask<String, Void, String> { Activity contextMain; public HttpAsyncTask(Activity _context) { contextMain = _context; } @Override protected String doInBackground(String... urls) { return GetStringFromURL(urls[0]); } // onPostExecute displays the results of the AsyncTask. @Override protectedvoid onPostExecute(String result) { Toast.makeText(contextMain.getBaseContext(), "Received!", Toast.LENGTH_LONG).show(); TextView tv_display = (TextView) contextMain.findViewById(R.id.textview_content); tv_display.setText(result); } publicstatic String GetStringFromURL(String url){ InputStream inputStream = null; String result = ""; try { // create HttpClient HttpClient httpclient = new DefaultHttpClient(); // make GET request to the given URL HttpResponse httpResponse = httpclient.execute(new HttpGet(url)); // receive response as inputStream inputStream = httpResponse.getEntity().getContent(); // convert inputstream to string if(inputStream != null) { result = convertInputStreamToString(inputStream); }else { result = "Did not work!"; } } catch (Exception e) { Log.d("InputStream", e.getLocalizedMessage()); } return result; } privatestatic String convertInputStreamToString(InputStream inputStream){ BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream)); String line = "", result = ""; try { while((line = bufferedReader.readLine()) != null) { result += line; } inputStream.close(); } catch (IOException e) { e.printStackTrace(); } return result; } } Tệp tin MainActivity.java: package com.readjsonfromurl; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; import android.util.Log; import android.widget.TextView; import android.app.Activity; publicclass MainActivity extends Activity { TextView tv_display; @Override protectedvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // check if you are connected or not if(isConnected()){ Log.i("Connect", "You are conncted"); } else{ Log.i("Connect", "You are NOT conncted"); } HttpAsyncTask httpAsyncTask = new HttpAsyncTask(MainActivity.this); httpAsyncTask.execute("https://api.myjson.com/bins/35zd8"); } publicboolean isConnected(){ ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Activity.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected()) { returntrue; } else { returnfalse; } } } Link download bài này: https://drive.google.com/file/d/0B8tAQ0_sJKCSSG5YeEhmRTVrTkU/view?usp=sharing Bài tập: 1. Viết ứng dụng xem thời tiết, lấy dữ liệu từ link JSON data cho trước hoặc JSON Weather API từ internet. Download icon hình ảnh ở đây: https://drive.google.com/file/d/0B8tAQ0_sJKCScW5YQ0NER0EtUUU/view?usp=sharing Tương tự như bài 10, ở đây có thêm tệp tin HttpAsyncTask.java và sửa lại tệp tin MainActivity.java như sau: + HttpAsyncTask.java: package com.weather_json; import android.app.Activity; import android.os.AsyncTask; import android.util.Log; import android.widget.Toast; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; publicclass HttpAsyncTask extends AsyncTask<String, Void, String> { Activity contextMain; public String strResult = ""; public HttpAsyncTask(Activity _context) { contextMain = _context; } @Override protected String doInBackground(String... urls) { return GetStringFromURL(urls[0]); } // onPostExecute displays the results of the AsyncTask. @Override protectedvoid onPostExecute(String result) { Toast.makeText(contextMain.getBaseContext(), "Received!", Toast.LENGTH_LONG).show(); strResult = result; //Gọi hàm Update bên MainActivity.java ((MainActivity) contextMain ).Update(); } publicstatic String GetStringFromURL(String url){ InputStream inputStream = null; String result = ""; try { // create HttpClient HttpClient httpclient = new DefaultHttpClient(); // make GET request to the given URL HttpResponse httpResponse = httpclient.execute(new HttpGet(url)); // receive response as inputStream inputStream = httpResponse.getEntity().getContent(); // convert inputstream to string if(inputStream != null) { result = convertInputStreamToString(inputStream); } else { result = "Did not work!"; } } catch (Exception e) { Log.d("InputStream", e.getLocalizedMessage()); } return result; } privatestatic String convertInputStreamToString(InputStream inputStream){ BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream)); String line = "", result = ""; try { while((line = bufferedReader.readLine()) != null) { result += line; } inputStream.close(); } catch (IOException e) { e.printStackTrace(); } return result; } } + MainActivity.java: package com.weather_json; import java.util.ArrayList; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.widget.ListView; publicclass MainActivity extends Activity { private ListView myListView; private MyArrayAdapter myAdapter; private String jsonStr = ""; ArrayList<Weather> weatherArray; HttpAsyncTask httpAsyncTask; @Override protectedvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myListView = (ListView) findViewById(R.id.mylistView); httpAsyncTask = new HttpAsyncTask(MainActivity.this); httpAsyncTask.execute("https://api.myjson.com/bins/4z4r4"); //create ArrayList weatherArray = new ArrayList<Weather>(); /*weatherArray.add(new Weather("Ha Noi", "Sunny", "32°C", "sunny")); weatherArray.add(new Weather("Quang Binh", "Clou", "31°C", "sunny")); weatherArray.add(new Weather("Hue", "Sunny", "35°C", "sunny")); weatherArray.add(new Weather("Quang Binh", "Sunny", "30°C", "sunny")); weatherArray.add(new Weather("Nha Trang", "Sunny", "29°C", "sunny")); weatherArray.add(new Weather("Phan Thiet", "Sunny", "28°C", "sunny"));*/ //create adapter myAdapter = new MyArrayAdapter(MainActivity.this, R.layout.list_item, weatherArray); myListView.setAdapter(myAdapter); } //Cập nhật dữ liệu publicvoid Update() { jsonStr = httpAsyncTask.strResult; Log.i("----Json result:", jsonStr); try { JSONObject jsonRootObject = new JSONObject(jsonStr); JSONArray jsonArray = jsonRootObject.optJSONArray("Weather"); for(int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); String cityName = jsonObject.optString("cityName").toString(); String weather = jsonObject.optString("weather").toString(); String temperature=jsonObject.optString("temperature").toString(); String icon = jsonObject.optString("icon").toString(); weatherArray.add(new Weather(cityName, weather, temperature, icon)); } myAdapter.notifyDataSetChanged(); } catch (JSONException e) { e.printStackTrace(); } } //... } 2. Chuyên mục Android Bài đăng Mới hơn Bài đăng Cũ hơn Trang chủ

Danh mục bài viết

  • Android (38)
  • C (15)
  • Java_Basic (23)

Các bài phổ biến

  • [C++] Hướng dẫn tạo và sử dụng thư viện LIB và DLL
  • Các cách thiết kế button trong android đẹp
  • Bài 11: Xử lý JSON trong Android
  • Bit Endian và Little Endian trong lập trình

Bài viết theo ngày tháng

  • ▼  2015 (63)
    • ▼  tháng 8 (32)
      • Bài 0: Cài đặt môi trường lập trình android
      • Bài 28: Giới thiệu về lập trình Game
      • Bài 27: Lập trình tương tác đa chạm
      • Bài 26: Practice
      • Bài 25: Lập trình multimedia
      • Bài 24: Practice
      • Bài 23: Lập trình đồ họa – hoạt hình
      • Bài 22: Viết ứng dụng kết nối dịch vụ web service
      • Bài 21: Practice
      • Bài 20: How to work with locations and maps
      • Bài 19: How to deploy an app
      • Bài 18: How to work with app widgets
      • Bài 17: How to work with content providers
      • Bài 16: How to work with tabs and custom adapters
      • Bài 15: Practice
      • Bài 14: How to work with SQLite databases
      • Bài 13: How to work with broadcast receivers
      • Bài 12: How to work with services and notifications
      • Bài 11: Xử lý JSON trong Android
      • Bài 10: How to work with threads, files, adapters,...
      • Bài 9: How to work with fragments
      • Bài 8: How to work with menus and preferences
      • Bài 7: Work with themes and styles
      • Bài 6: How to handle events
      • Bài 5: How to work with layouts and widgets
      • Bài 4: How to test and debug an Android app
      • Bài 3: How to develop your first Android app
      • Bài 2: Use Eclipse for Android development
      • Bài 1: An introduction to Android
      • Một số link test C/C++ online
      • Bài 21: Ôn tập
      • Các bài học C/C++
Copyright © Programming Tutorial

Từ khóa » đọc File Json Trong Android