讀取網路資料及JSON開放資料 靜宜大學資管系 楊子青

Slides:



Advertisements
Similar presentations
第二章 Android 简单界面开发 倚动软件工厂实验室 View 组件介绍 布局管理器 自定义组件 目录 CONTENTS.
Advertisements

Hello小程序的运行和编译 Java AppletJava小程序的构成 1、关键字
MVC Servlet与MVC设计模式.
Part 2 開發Android應用程式的流程
P303 HTML/DHTML/CSS/JavaScript 專業HTML網頁設計 陳錦輝.
14 JavaScript语言基础 JavaScript是一种轻量级、解释型的Web开发语言。所谓轻量级,就是语言的体系结构不是很庞杂,例如,没有C、Java等语言中的类、内存管理、系统管理等高深的知识范畴;所谓解释型,就是语言在浏览器或服务器等环境中直接被解释执行,不需要对源代码进行编译操作。
第二章 JAVA语言基础.
類別與物件 Class & Object.
5.1 – 表格(FORM) 輸入元素 : 兩種傳遞方法 : GET or POST 範例 1. 文字欄位 Text box
Android + Web Service 建國科技大學 資管系 饒瑞佶 2017/3 V1.
ArrayAdapter & Spinner
Android App 系統開發教學 Luna 陳雯琳 2014/12/18
實驗四:單位轉換程式.
第2章 建立Android應用程式 2-1 Java語言、XML文件與Android 2-2 建立第一個Android應用程式
Chapter 13 Android 實戰演練.
Android + JUnit 單元測試 建國科技大學資管系 饒瑞佶 2012/8/19V4.
第3章 分布式文件系统HDFS (PPT版本号:2017年2月版本)
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
實驗十三:顯示目前經緯度位置.
API设计实例分析 通用IO API.
Java语言程序设计 清华大学出版社 第9章 网络通信.
数据库操作示例 import java.sql.*; //导入java.sql包 public class JDBCDemo {
Ch06 再談選單元件 物件導向系統實務.
例外處理(Exception Handling)
使用Android控制Arduino 史先强
PHP 5 入門基礎 第一個PHP 程式 PHP 資料型態.
第10章 App微信分享的实现 倚动实验室.
第8章 Android内容提供者(ContentProvider)应用
Chapter 6 Advanced UI Design.
崑山科技大學資訊管理系 伺服網頁程式設計 系統開發細部流程 教師:游峰碩.
Android智慧型手機程式設計實務應用班
Android介面設計 Android智慧型手機程式設計 建國科技大學 資管系 饒瑞佶 2012/4 V1 2012/8 V2
本單元介紹何謂變數,及說明變數的宣告方式。
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
厦门大学数据库实验室 MapReduce 连接
第9章 使用意圖啟動活動與內建應用程式 9-1 意圖的基礎 9-2 使用意圖啟動活動
程式設計實作.
CH7 佈局、按鈕與文字編輯元件.
Android + Service 建國科技大學 資管系 饒瑞佶.
2018/12/3 面向对象与多线程综合实验-网络编程 教师:段鹏飞.
Java语言程序设计 第五部分 Java异常处理.
實驗十四:顯示與控制地圖.
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
例外處理與 物件序列化(Exception Handling and Serialization of Objects)
异常及处理.
第11章 Android客户端与服务器交互.
4.2通讯服务模块线程之间传递信息 信息工程系 向模军 Tel: QQ:
主编:钟元生 赵圣鲁.
透過YouTuBe API取得資料 建國科技大學 資管系 饒瑞佶 2018/1 V1.
Ajax编程技术 第六章 调试与错误处理.
網路應用.
C#程序设计基础 $3 成员、变量和常量.
Android視窗介面 建國科技大學 資管系 饒瑞佶 2010/10.
網站HOLMES DATA監測代碼.
實驗九:延續實驗八, 製作一個完整音樂播放器
Location Based Services - LBS
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
補間動畫 (Tween Animation) 靜宜大學資管系 楊子青
第二章 Java基本语法 讲师:复凡.
第二章 Java语法基础.
网 站 设 计 与 建 设 Website design and developments
第二章 Java基本语法 讲师:复凡.
Java程序设计 第17章 异常和断言.
RecyclerView and CardView
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
Android Speech To Text(STT)
用Intent啟動程式中的其他Activity、運用WebView顯示網頁 靜宜大學資管系 楊子青
第2章 Java语言基础.
第4讲 类和对象、异常处理 ggao.
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
Presentation transcript:

讀取網路資料及JSON開放資料 靜宜大學資管系 楊子青

1. 讀取網路資料 Android Http連線 以往作法 建議作法:統一改用HttpURLConnection Get method: 使用HttpGet與HttpClient class Post method: 使用URLEncoder與URLConnection Apache HTTP Client Removal from API23 如果要使用,需自行安裝jar 建議作法:統一改用HttpURLConnection

AsyncTask非同步任務 專門用來處理背景任務與UI的類別 Android 4.0 之後,所有的網路行為,都不能在主執行緒(Main Thread,又稱UI執行緒)執行 任何UI元件都在主執行緒中執行,若是程式佔據主執行緒很久(如按了一個按鈕後,整個App停住五秒),使用者體驗會非常差 因此許多耗時的程式建議在背景執行,最常見的是網路的功能

測試文件檔 tcyang_about1.txt: 楊子青 靜宜大學資管系 Tel: 04-26328001-18110 E-Mail: tcyang@pu.edu.tw 研究室:靜宜大學 主顧樓579R 個人網頁:http://www1.pu.edu.tw/~tcyang/ 用記事本編輯,存成urf8格式,傳到網路空間 例如: http://www1.pu.edu.tw/~tcyang/tcyang_about1.txt

專案:ReadJsonExample 介面設計 修改成LinearLayout (vertical) TextView id命名為 @+id/txv 新增一個button在txv上方 Text為 讀取網路資料 textSize為 20sp onClick為 ReadWebData

加入網路存取權限 manifests\AndroidManifest.xml <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

MainActivity.java程式碼 import android.app.ProgressDialog; import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.TextView; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL;

MainActivity.java程式碼 public void ReadWebData(View v){ public class MainActivity extends AppCompatActivity { 裡面加入: public void ReadWebData(View v){ new AsyncRetrieve().execute(); }

MainActivity.java程式碼 public class MainActivity extends AppCompatActivity { 裡面加入: public class AsyncRetrieve extends AsyncTask<String, String, String> { ProgressDialog pdLoading = new ProgressDialog(MainActivity.this); HttpURLConnection conn; URL url = null; //this method will interact with UI, here display loading message @Override protected void onPreExecute() { super.onPreExecute(); pdLoading.setMessage("\t讀取資料中,請稍候..."); pdLoading.setCancelable(false); pdLoading.show(); }

MainActivity.java程式碼 // This method does not interact with UI, You need to pass result to onPostExecute to display @Override protected String doInBackground(String... params) { try { // 初始化 URL url = new URL("http://www1.pu.edu.tw/~tcyang/tcyang_about1.txt"); // 取得連線物件 conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(10000); conn.setConnectTimeout(15000); // setDoOutput to true as we recieve data from json file conn.setDoOutput(true); // 讀取資料 BufferedReader reader = new BufferedReader(new InputStreamReader( conn.getInputStream(), "UTF-8")); String result = "", line; while ((line = reader.readLine()) != null) { result += line; } // Pass data to onPostExecute method return(result); } catch (IOException e) { e.printStackTrace(); return e.toString(); } finally { conn.disconnect();

MainActivity.java程式碼 // this method will interact with UI, display result sent from doInBackground method @Override protected void onPostExecute(String result) { pdLoading.dismiss(); TextView txv = (TextView) findViewById(R.id.txv); txv.setText(result); }

執行結果

2. JSON JavaScript Object Notation is a format for storing and transporting data is lightweight data interchange format (非常輕量級的資料交換格式) JSON is language independent * The JSON syntax is derived from JavaScript object notation syntax, but the JSON format is text only. Code for reading and generating JSON data can be written in any programming language JSON is "self-describing" and easy to understand.

JSON格式 物件(object)用大括號 { } 陣列(array)用中括號 [ ]

JSON Example { "employees":[ ] } {"firstName":"John", "lastName":"Doe"}, {"firstName":"Anna", "lastName":"Smith"}, {"firstName":"Peter", "lastName":"Jones"} ] }

Example obj.employees[1].firstName + " " + obj.employees[1].lastName; <!DOCTYPE html> <html> <body> <h2>Create Object from JSON String</h2> <p id="demo"></p> <script> var text = '{"employees":[' + '{"firstName":"John","lastName":"Doe" },' + '{"firstName":"Anna","lastName":"Smith" },' + '{"firstName":"Peter","lastName":"Jones" }]}'; obj = JSON.parse(text); document.getElementById("demo").innerHTML = obj.employees[1].firstName + " " + obj.employees[1].lastName; </script> </body> </html>

測試文件檔 tcyang_about2.txt: 用記事本編輯,存成urf8格式,傳到網路空間 [ {"學校":"靜宜大學", "地址":"台中市沙鹿區台灣大道七段200號"}, {"學校":"東海大學", "地址":"台中市西屯區台灣大道四段1727號"}, {"學校":"逢甲大學", "地址":"台中市西屯區文華路100號"} ] 用記事本編輯,存成urf8格式,傳到網路空間 例如: http://www1.pu.edu.tw/~tcyang/tcyang_about2.txt

MainActivity.java程式碼修改 AsyncRetrieve裡的doInBackground,修改原先的網址: // 初始化 URL //url = new URL("http://www1.pu.edu.tw/~tcyang/tcyang_about1.txt"); url = new URL("http://www1.pu.edu.tw/~tcyang/tcyang_about2.txt");

JSONObject與JSONArray

JSON Parse (解析) protected void onPostExecute(String result) { pdLoading.dismiss(); TextView txv = (TextView) findViewById(R.id.txv); //txv.setText(result); try { String jsonResult = ""; JSONArray array = new JSONArray(result); for (int i = 0; i < array.length(); i++) { JSONObject row = array.getJSONObject(i); jsonResult += row.getString("學校") + "," + row.getString("地址") + "\n"; } txv.setText(jsonResult); } catch (JSONException e) { e.printStackTrace();

3. Open Data實例 政府資料開放平台 http://data.gov.tw/,輸入JSON關鍵字 左邊的「資料集提供機關」,選擇「行政院農業委員會 」,有一個「國家森林遊樂區」 說明頁: http://data.gov.tw/node/6035 JSON資料: http://data.coa.gov.tw/Service/OpenData/DataFileService.aspx?UnitId=082

原始JSON檔案內容

使用Online JSON Viewer觀看 http://jsonviewer.stack.hu/ Text頁籤,選Load JSON data按鈕,輸入JSON檔案的網址

分析結果 切換到Viewer頁籤

修改MainActivity.java程式碼 protected String doInBackground(String... params) { try { // 初始化 URL //url = new URL("http://www1.pu.edu.tw/~tcyang/tcyang_about1.txt"); //url = new URL("http://www1.pu.edu.tw/~tcyang/tcyang_about2.txt"); url = new URL("http://data.coa.gov.tw/Service/OpenData/DataFileService.aspx?UnitId=082"); … protected void onPostExecute(String result) { … try { String jsonResult = ""; JSONArray array = new JSONArray(result); for (int i = 0; i < array.length(); i++) { JSONObject row = array.getJSONObject(i); //jsonResult += row.getString("學校") + "," + row.getString("地址") + "\n"; jsonResult += String.valueOf(i) + row.getString("遊樂區名稱") + "," + row.getString("特色景觀") + "\n";

讀取開放資料之執行結果

加入ScrollView讓文字可上下捲動 刪除ScrollView伴隨的Linearlayout 將txv拖入ScrollView