用到的工具 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 相同