顯示廣告
隱藏 ✕
看板 Knuckles_note
作者 Knuckles (站長 那克斯)
標題 [AndroidStudio] 讀取網路上的JSON資料
時間 2015-11-27 Fri. 18:45:17


開啟網路功能

開啟APP設定檔 AndroidManifest.xml
在 <application 這行上面加上
<uses-permission android:name="android.permission.INTERNET"/>

[圖]



安裝第三方函式庫

使用 Android Async Http 來讀取網路上的JSON資料
使用 Picasso 來顯示網路上的圖片

開啟 Gradle Scripts 下的 build.gradle (Module:app)
在 dependencies { ... } 裡加上這兩行
	
//加上用來讀取網路的第三方函式庫
	
compile 'com.loopj.android:android-async-http:1.4.9'
	
compile 'com.squareup.picasso:picasso:2.1.1'

版本數字可參考官網改用新的版本

修改了 Gradle Scripts 後上面會出現需要同步的訊息,點一下後面的「Sync Now」
或是點工具列上的 Sync Project with Gradle Files 按鈕
[圖]


這樣 Android Studio 就會自己下載函式庫並安裝好了


修改 MainActivity.java

在類別 MainActivity 裡加上一個成員函式 loadData()
    private void loadData(){
        String urlString = "http://disp.cc/api/hot_text.json";

        AsyncHttpClient client = new AsyncHttpClient();
        client.get(urlString, new JsonHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                Toast.makeText(getApplicationContext(),
                        "Success!", Toast.LENGTH_LONG).show();
                Log.d("Hot Text:", response.toString());
            }

            @Override
            public void onFailure(int statusCode, Header[] headers, Throwable e, JSONObject error) {
                Toast.makeText(getApplicationContext(),
                        "Error: " + statusCode + " " + e.getMessage(),
                        Toast.LENGTH_LONG).show();
                // Log error message
                Log.e("Hot Text:", statusCode + " " + e.getMessage());
            }
        });
    }

如果有設定自動 import 函式庫的話,前面的 import 就會自動加上需要的函式庫
沒有的話可以依出現的提示按 alt+Enter 就會加上需要 import 的函式庫了

其中用到的 Header 因為有多個 import 可選,要按 alt+Enter 手動選擇
[圖]


選第二個「cz.msebera.android.httpclient.Header」
[圖]


然後在成員函式 onCreate 裡加上
	
loadData();

寫好的整個 MainActivity.java 會像這樣
[圖]



執行一下看看
有讀取網址成功的話,會在 APP 畫面下面出現 Toast 產生的 Success!,過幾秒後會消失
[圖]


在 Android Studio 下方的 logcat 會顯示 Log.d 輸出的結果
[圖]


JSON資料的使用方法,寫在這一篇
[AndroidStudio] JSONObject 使用方法 - KnucklesNote板 - Disp BBS


顯示「載入中」的圖示

若網路比較慢的話,在等待下載資料的時候畫面會像卡住了一樣
需要顯示個「載入中」的圖示才行

在 public class MainActivity …
這行下面加上個類別的成員變數
    ProgressDialog mDialog;

在成員函式 onCreate 裡,之前加上的 loadData(); 這行上面加上
        mDialog = new ProgressDialog(this);
        mDialog.setMessage("Loading Data...");

在成員函式 loadData 裡,最前面加上
        mDialog.show();
在載入資料前顯示「載入中」的圖示

在使用 client.get 後的 onSuccess 和 onFailure 裡,最前面加上
                mDialog.dismiss();
在資料載入完成後關閉「載入中」的圖示

執行結果,在下載資料完成前的畫面
[圖]


在載入完成之前,點擊圖示以外的灰色區域也可以關閉圖示
若不希望圖示被點擊關閉的話,可使用
mDialog.setCancelable(false);



參考:
Android Tutorial for Beginners: Part 3
Using Android Async Http Client
Android Async Http 說明文件: JsonHttpResponseHandler
--
※ 作者: Knuckles 時間: 2015-11-27 18:45:17
※ 編輯: Knuckles 時間: 2016-02-17 10:52:37
※ 看板: KnucklesNote 文章推薦值: 0 目前人氣: 0 累積人氣: 3634 
分享網址: 複製 已複製
1樓 時間: 2016-01-08 16:13:58 (台灣)
  01-08 16:13 TW
···
感謝教學, 在"顯示「載入中」的圖示"這一段, 摸索之後終於把指令行放對位置, 順利執行成功了.
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇