1. 程式人生 > >Android常用開源庫———————————OkHttp的使用方法

Android常用開源庫———————————OkHttp的使用方法

OkHttp是一個優秀的網路通訊庫,GitHub專案主頁地址

 

基本使用

在專案中中新增OkHttp庫的依賴。.

implementation("com.squareup.okhttp3:okhttp:3.12.0")

 

OkHttp進行Get請求

//建立一個OkHttpClient的例項
OkHttpClient client = new OkHttpClient();
//建立一個Request物件
Request request = new Request.Builder().build;

//通過url()方法來設定目標的網路地址
Request request = new
Request.Builder().url("http://www.baidu.com").build(); //呼叫newCall()方法來建立一個Call物件 Response response = client.newCall(request).exute(); //Response物件就是伺服器返回的資料,通過如下寫法得到返回的具體內容 String responseData = response.body().string()

 

OkHttp進行Post請求

//構建一個RequestBody物件存放待提交的引數
RequestBody requestBody = new
FormBody.Builder().add("username","admin").add("password","12345").build(); //呼叫post()方法 Request request = new Request.Builder().uirl("http://www.baidu.com").post(requestBody).build();

接下來的操作和Get請求一樣

 

同步請求時,需要開啟子執行緒;非同步請求時呼叫enqueue,無需開啟子執行緒。

public class MainActivity extends AppCompatActivity  implements
View.OnClickListener{ TextView responseText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button sendRequest = (Button) findViewById(R.id.send_request); Button sendAsyncRequest = (Button) findViewById(R.id.send_asyncRequest); responseText = (TextView) findViewById(R.id.response_text); sendRequest.setOnClickListener(this); sendAsyncRequest.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.send_request: sendRequestWithOkHttp(); break; case R.id.send_asyncRequest: sendAsyncRequestWithOkHttp(); break; default: break; } } private void sendAsyncRequestWithOkHttp() { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url("http://www.baidu.com").build(); Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Toast.makeText(MainActivity.this,"get failed", Toast.LENGTH_SHORT).show(); } @Override public void onResponse(Call call, Response response) throws IOException { final String res = response.body().string(); runOnUiThread(new Runnable() { @Override public void run() { responseText.setText(res); } }); } }); } private void sendRequestWithOkHttp() { new Thread(new Runnable() { @Override public void run() { try{ 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() { responseText.setText(response); } }); } }