看板 Knuckles_note
作者 標題 [AndroidStudio] 讀取網路上的JSON資料
時間 2015-11-27 Fri. 18:45:17
開啟網路功能
開啟APP設定檔 AndroidManifest.xml
在 <application 這行上面加上
<uses-permission android:name="android.permission.INTERNET"/>
![[圖]](http://i.imgur.com/8vYDaAY.png)
安裝第三方函式庫
使用 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 按鈕
![[圖]](http://i.imgur.com/sIq3fAb.png)
這樣 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());
}
});
}
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 手動選擇
![[圖]](http://i.imgur.com/u6LOUV3.png)
選第二個「cz.msebera.android.httpclient.Header」
![[圖]](http://i.imgur.com/4hv4BfX.png)
然後在成員函式 onCreate 裡加上
loadData();寫好的整個 MainActivity.java 會像這樣
![[圖]](http://i.imgur.com/YZaM42b.png)
執行一下看看
有讀取網址成功的話,會在 APP 畫面下面出現 Toast 產生的 Success!,過幾秒後會消失
![[圖]](http://i.imgur.com/mHm9aRB.png)
在 Android Studio 下方的 logcat 會顯示 Log.d 輸出的結果
![[圖]](http://i.imgur.com/YrAJQCC.png)
JSON資料的使用方法,寫在這一篇
[AndroidStudio] JSONObject 使用方法 - KnucklesNote板 - Disp BBS
顯示「載入中」的圖示
若網路比較慢的話,在等待下載資料的時候畫面會像卡住了一樣
需要顯示個「載入中」的圖示才行
在 public class MainActivity …
這行下面加上個類別的成員變數
ProgressDialog mDialog;
在成員函式 onCreate 裡,之前加上的 loadData(); 這行上面加上
mDialog = new ProgressDialog(this);
mDialog.setMessage("Loading Data...");
mDialog.setMessage("Loading Data...");
在成員函式 loadData 裡,最前面加上
mDialog.show();
在載入資料前顯示「載入中」的圖示在使用 client.get 後的 onSuccess 和 onFailure 裡,最前面加上
mDialog.dismiss();
在資料載入完成後關閉「載入中」的圖示執行結果,在下載資料完成前的畫面
![[圖]](http://i.imgur.com/41DJEmq.png)
在載入完成之前,點擊圖示以外的灰色區域也可以關閉圖示
若不希望圖示被點擊關閉的話,可使用
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
回列表(←)
分享