非同步請求 - GET 方法

AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />

MainActivity.java

public class MainActivity extends Activity {
    private TextView v;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //設定顯示畫面
        v = new TextView(this);
        setContentView(v);

        OkHttpClient client = new OkHttpClient();
        // 設定 Socket 嘗試連線時間上限
        client.setConnectTimeout(60, TimeUnit.SECONDS);
        // 設定 Socket 嘗試讀取時間上限
        client.setReadTimeout(60, TimeUnit.SECONDS);

        // 以 Google 網頁為例
        String url = "http://google.com.tw/";
        // 建立請求物件,設定網址
        Request request = new Request.Builder().url(url).build();
        // 以非同步方式執行請求,並定義 Callback 事件
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Request request, final IOException e) {
                // 此方法不執行在主執行緒中,注意不能更新介面。
                String error = e.getMessage();
                // 顯示錯誤訊息
                updateText(error);
            }

            @Override
            public void onResponse(final Response response) {
                // 此方法不執行在主執行緒中,注意不能更新介面。
                try {
                    String result = "";
                    // 取得任一 HEADER
                    result += response.header("content-type") + "\n";
                    // 取得狀態碼
                    result += response.code() + "\n";
                    // 是否成功
                    result += response.isSuccessful() + "\n";
                    // 取得內容
                    result += response.body().string() + "\n";
                    // 顯示回傳訊息
                    updateText(result);
                } catch (IOException e) {
                    String result = "Load info fail.";
                    updateText(result);
                }

            }
        });
    }

    // 使用 View 的 post 方法,將介面更新執行在主執行緒中。
    private void updateText(final String text) {
        v.post(new Runnable() {
            @Override
            public void run() {
                v.setText(text);
            }
        });
    }
}