Bài 11: Xử Lý JSON Trong Android - Programming Tutorial
Có thể bạn quan tâm
Programming Tutorial Được tạo bởi Blogger.
HTML/CSS
tiện ích HTML cssTổ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_BasicTì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
- ► 2016 (3)
- ► tháng 5 (1)
- ► tháng 4 (1)
- ► tháng 3 (1)
- ► 2014 (16)
- ► tháng 11 (1)
- ► tháng 10 (1)
- ► tháng 9 (11)
- ► tháng 8 (3)
Từ khóa » đọc File Json Trong Android
-
Hướng Dẫn Xử Lý JSON Trong Android - Openplanning
-
Xử Lý JSON Trong Android- Cách Làm Không Thể Dễ Hơn - VNTALKING
-
Thao Tác Với JSON Trong Android - STDIO
-
Bài 51: Xử Lý JSON Trong Android | Advanced Programming
-
[Android] Chương Trình đọc 1 File JSON Từ Server Và Phân Tích Dữ ...
-
[Android Căn Bản] Bài 13: Xử Lý Json Trong Android - TUAN DC
-
Cách đọc Và Ghi File Json Trong Android Studio - Dạy Nhau Học
-
Lập Trình Android: Đọc JSON đổ Vào ListView - KhoaPham.Vn
-
Đọc File Json Trong Android
-
[Android Studio] Đọc Json Từ URL đổ Dữ Liệu Vào Listview Sử Dụng ...
-
[Android] JSon Trong Android - Phần 4: Xử Lý Lấy JSon Bằng Java