以HttpURLConnection連接網頁資料


設定INTERNET權限


只要在app中會使用到網際網路存取資料, 則必須設定INTERNET權限. 如下片段第一列

<uses-permission android:name="android.permission.INTERNET" />
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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



開始連線存取


  • 1. 建立URL物件實體, 將連結網址url以字串方式傳遞參數
  • 2. 使URL物件實體呼叫openConnection()方法傳回轉型為HttpURLConnection物件實體
  • 3. 再以HttpURLConnection物件實體呼叫connect()進行連線
  • 4. 最後透過呼叫getInputStream()傳回輸入串流, 進行資料讀取

try {
    URL url = new URL("https://www.bradchao.com");
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.connect();

    BufferedReader reader = new BufferedReader(
            new InputStreamReader(conn.getInputStream()));
    String line;
    while ( (line = reader.readLine()) != null){
        dataString.append(line + "\n");
    }
    reader.close();
    uiHandler.sendEmptyMessage(0);
} catch (Exception e) {
    Log.v("brad", e.toString());
}
								



解析JSON資料內容


首先, 要能先判斷回傳的資料內容結構.
如果是中括號[], 則為一個陣列資料結構.
如果是大括號{}, 則為一個物件資料結構.
陣列中的元素之間, 會以一個逗號分格; 而物件中的個別屬性, 也會以一個逗號分格.
而屬性結構, 則為一個字串屬性, 冒號後面為其值.
解析順序將為由外而內.
如果一開始是一個陣列結構, 則先將 json 字串內容來建構出new JSONArray("json字串"). 此時, 則繼續針對其元素進行解析. 如果是物件資料結構, 則執行迴圈, 逐一透過 getJSONObject(index) 傳回JSONObject物件實體.
對於一個JSONObject物件實體而言, 則將以 getString("key字串")傳回其字串資料值. 以下為一個範例, 節錄來自: http://data.coa.gov.tw/Service/OpenData/ODwsv/ODwsvTravelFood.aspx

[
  {
    "ID": "01_100",
    "Name": "湖莓宴餐坊",
    "Address": "苗栗縣大湖鄉富興村八寮彎2-7號4樓",
    "Tel": "037-995677",
    "HostWords": "湖苺宴開在大湖酒莊的4樓,是大湖地區農會經營的田媽媽餐坊,但是不同於一般田園風格的田媽媽主題餐廳,主打草莓創意料理的湖苺宴,裝潢、菜色都充滿年輕想法,一群六年級中段班的田媽媽,把她們對草莓的奇思異想,充份發揮在料理上。\r\n餐廳所供的菜色會依季節不同做更換,皆以套餐為主,在草莓產季菜單有德國烤豬腳酌草莓醋酸菜、草莓魚排酌草莓酸辣醬等,另外,這裡的意大利麵可是別處吃不到的哦!因為田媽媽們在麵條中加入了草莓,遊客吃了會有驚豔之感哦!\r\n若是水梨產季,則推出水梨風味套餐,其中「水梨磨菇里肌肉餐」餐點以新鮮的水梨加上鮮嫩多汁的里肌肉以燴飯的方式呈現,讓您吃到水果的鮮甜及富有彈性的里肌肉,多層次的口感保證讓您回味無窮。",
    "Price": "",
    "OpenHours": "",
    "CreditCard": "True",
    "TravelCard": "True",
    "TrafficGuidelines": "",
    "ParkingLot": "",
    "Url": "",
    "Email": "",
    "BlogUrl": "",
    "PetNotice": "",
    "Reminder": "",
    "FoodMonths": "",
    "FoodCapacity": "",
    "FoodFeature": "湖苺宴開在大湖酒莊的4樓,是大湖地區農會經營的田媽媽餐坊,但是不同於一般田園風格的田媽媽主題餐廳,主打草莓創意料理的湖苺宴,裝潢、菜色都充滿年輕想法,一群六年級中段班的田媽媽,把她們對草莓的奇思異想,充份發揮在料理上。\r\n餐廳所供的菜色會依季節不同做更換,皆以套餐為主,在草莓產季菜單有德國烤豬腳酌草莓醋酸菜、草莓魚排酌草莓酸辣醬等,另外,這裡的意大利麵可是別處吃不到的哦!因為田媽媽們在麵條中加入了草莓,遊客吃了會有驚豔之感哦!\r\n若是水梨產季,則推出水梨風味套餐,其中「水梨磨菇里肌肉餐」餐點以新鮮的水梨加上鮮嫩多汁的里肌肉以燴飯的方式呈現,讓您吃到水果的鮮甜及富有彈性的里肌肉,多層次的口感保證讓您回味無窮。",
    "City": "苗栗縣",
    "Town": "大湖鄉",
    "Coordinate": "24.4402288,120.876103",
    "PicURL": "https://ezgo.coa.gov.tw/Uploads/opendata/TainmaMain01/APPLY_D/20151007173924.jpg"
  },
  {
    "ID": "01_101",
    "Name": "神雕邨複合式茶棧",
    "Address": "苗栗縣三義鄉廣盛村廣聲新城38鄰2巷26號",
    "Tel": "037-875858",
    "HostWords": "「邨」是「村」的古字,民國 84 年三義木雕博物館開館,沿途兩條木雕街有各家師傅展現神乎奇技的木雕工法,因此被稱之為「神雕」邨。當年客人的一句玩笑話:「這裡全是木雕店家,沒有餐廳,難道大家都吃木頭嗎?」讓性格豪爽的阿雪媽媽,打頭陣開店,主打擂茶、簡餐和農特產品,兼營民宿;93 年加入田媽媽後更下定決心將婆家的客家菜搬上餐桌,轉型成複合式餐廳。<br><br>\r\n\r\n阿雪媽媽是住彰化的閩南人,家裡開雜貨店,個性開朗,喜愛與人接觸;婚前不會做菜的她當了客家媳婦後,跟著婆婆學習做客家菜,她說;「客家人吃鹹不吃甜、菜餚裡鮮少放糖,也因為客家人大部分住山城裡,到平地取貨不易,因此客家媽媽們都發展出一套自給自足的本領,自製蘿蔔乾、梅乾菜、桔醬等。」<br><br>\r\n\r\n到這裡用餐經濟實惠,可視人數調整餐點份量,「梅干扣肉」、「薑絲大腸」、「客家小炒」、「蘿蔔乾豬肉湯」,都是道地的客家美味;菜餚可依季節變化,「炒桂竹筍」、「鹹蛋苦瓜」都是開胃下飯的好選擇。<br><br>\r\n\r\n古早時代擂茶是某種身分象徵,家裡經濟條件不錯才有多餘穀物可以曬乾、擂茶。阿雪媽媽說,閩南人「泡」茶葉,客家人「磨」茶葉。「客家擂茶」將茶葉、堅果和穀物依照順序磨成細粉,產生熱氣將食物磨成黏稠狀,再用湯匙從大缽上把它們刮下來、以熱水沖泡後飲用。現在擂茶已成為大眾皆知的客家精神代表,早晨起來喝上一杯,堅果和米香的香氣在鼻腔久久不散,精神充沛。",
    "Price": "",
    "OpenHours": "",
    "CreditCard": "True",
    "TravelCard": "True",
    "TrafficGuidelines": "",
    "ParkingLot": "",
    "Url": "",
    "Email": "",
    "BlogUrl": "",
    "PetNotice": "",
    "Reminder": "",
    "FoodMonths": "",
    "FoodCapacity": "",
    "FoodFeature": "「邨」是「村」的古字,民國 84 年三義木雕博物館開館,沿途兩條木雕街有各家師傅展現神乎奇技的木雕工法,因此被稱之為「神雕」邨。當年客人的一句玩笑話:「這裡全是木雕店家,沒有餐廳,難道大家都吃木頭嗎?」讓性格豪爽的阿雪媽媽,打頭陣開店,主打擂茶、簡餐和農特產品,兼營民宿;93 年加入田媽媽後更下定決心將婆家的客家菜搬上餐桌,轉型成複合式餐廳。<br><br>\r\n\r\n阿雪媽媽是住彰化的閩南人,家裡開雜貨店,個性開朗,喜愛與人接觸;婚前不會做菜的她當了客家媳婦後,跟著婆婆學習做客家菜,她說;「客家人吃鹹不吃甜、菜餚裡鮮少放糖,也因為客家人大部分住山城裡,到平地取貨不易,因此客家媽媽們都發展出一套自給自足的本領,自製蘿蔔乾、梅乾菜、桔醬等。」<br><br>\r\n\r\n到這裡用餐經濟實惠,可視人數調整餐點份量,「梅干扣肉」、「薑絲大腸」、「客家小炒」、「蘿蔔乾豬肉湯」,都是道地的客家美味;菜餚可依季節變化,「炒桂竹筍」、「鹹蛋苦瓜」都是開胃下飯的好選擇。<br><br>\r\n\r\n古早時代擂茶是某種身分象徵,家裡經濟條件不錯才有多餘穀物可以曬乾、擂茶。阿雪媽媽說,閩南人「泡」茶葉,客家人「磨」茶葉。「客家擂茶」將茶葉、堅果和穀物依照順序磨成細粉,產生熱氣將食物磨成黏稠狀,再用湯匙從大缽上把它們刮下來、以熱水沖泡後飲用。現在擂茶已成為大眾皆知的客家精神代表,早晨起來喝上一杯,堅果和米香的香氣在鼻腔久久不散,精神充沛。",
    "City": "苗栗縣",
    "Town": "三義鄉",
    "Coordinate": "24.4053747,120.760789",
    "PicURL": "https://ezgo.coa.gov.tw/Uploads/opendata/TainmaMain01/APPLY_D/20151007173728.jpg"
  }
]								
								


則處理範例如下:

private void parseJSON(String json){
    try {
        JSONArray root = new JSONArray(json);
        for (int i=0; i < root.length(); i++){
            JSONObject row = root.getJSONObject(i);
            String name = row.getString("Name");
            String tel = row.getString("Tel");
            Log.v("brad", name + " : " + tel);
        }
    } catch (Exception e) {
        Log.v("brad", e.toString());
    }
}								
								

原始碼分享: Github

影片教學