1. 程式人生 > >利用AS實現OKHttp協議的網路請求

利用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 相同