利用AS實現OKHttp協議的網絡請求

用到的工具  Android Studio

OKhttp相對於HttpURLConnection來說更加的方便和簡單實用,具體的方法如下:

在使用okhttp的時候需要引用它開源的庫這裏給出一個路徑方便查看最新的版本

http://github.com/square/okhttp

其中需要導入依賴我導入的如下:

compile 'com.squareup.okhttp3:okhttp:3.10.0'

在使用的實用必須創建okhttp的實例如下:

OkHttpClient client = new OkHttpClient();

如果需要發送請求需要創建一個Request對象

Request request = new Request.Builder().build();

之後調用okHttpClient的newCall()方法創建一個對象來調用他的execute()方法來發送請求和獲取服務器返回的數據

Response response = client.newCall(request).execute();

其中response對象就是服務器返回的數據,進行如下操作可以得到返回的內容

String responseData = response.body().string();

如果是發起一條POST請求會比較複雜需要一個Body對象來存放待提交的數據

RequestBody requestBody = new FormBody.Builder()

    .add("username","admin")

    .add("password","123456")

    .build();

然後在Resquest.Builder中調用post()方法RequestBody 對象返回如下:

Request request = new Request.Builder()

    .url("http://www.baidu.com")

    .post(requestBody)

    .build();

獲取到的數據操作和GET請求一樣,調用execute()方法來發送數據就行具體代碼如下:

MainActivity代碼如下:

package com.example.administrator.testwebview;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    //返回服務器顯示的數據,未處理時是HTML代碼
    TextView responseText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //初始化控件
        Button sendRequest = (Button) findViewById(R.id.send_request);
        responseText = (TextView) findViewById(R.id.response_text);
        sendRequest.setOnClickListener(this);
    }

    //當點擊向服務器發送請求時候執行下面代碼
    @Override
    public void onClick(View v) {
        if(v.getId() == R.id.send_request){
            //當點擊執行發送請求時執行
            sendRequestsWithOkHttp();
        }
    }

    private void sendRequestsWithOkHttp() {
        //首先開啓線程執行網絡請求
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    //創建okhttp對象的實例
                    OkHttpClient client = new OkHttpClient();
                    Request request = new Request.Builder()
                            .url("http://www.baidu.com")
                            .build();

                    Response response = client.newCall(request).execute();
                    String responseData = response.body().string();
                    showResponse(responseData);
                } catch(Exception e)
                {
                e.printStackTrace();
            }
        }
        }).start();
    }

    private void showResponse(final String  response) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                //這裏進行UI操作,因爲不能在子線程調用UI操作
                //將獲取到的字符串加載到Text界面顯示
                responseText.setText(response);
            }
        });
    }
}
實現的功能和HttpURLConnection 相同
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章