目錄
- 寫在前面的話
- 一、概述
- 二、GET和POST請求
- (一)步驟展示
- (二)效果展示
- 補充
寫在前面的話
1、主要參考自:https://b23.tv/FABE0n
2、內容如果有不對的,希望可以指出或補充,
3、新知識,
一、概述
OKHttp:是一個高效的HTTP客戶端,支持get請求和post請求,支持基于Http/https的(大)檔案上傳和下載,支持加載圖片,支持連接同一個地址的鏈接共享同一個socket(計算機之間進行通信的一種約定或一種方式),通過連接池來減小回應延遲,還有下載檔案透明的GZIP壓縮(網站壓縮加速的一種技術),請求快取等優勢,用于替代HttpUrlConnection和AsyncHttpClient,
其核心主要有:路由、連接協議、攔截器(主要是指添加、移除或轉換請求或回應的頭部資訊)、代理、安全性認證、連接池以及網路適配,
這個框架也是square公司開源的一個網路請求庫(okhttp內部依賴okio),已被Google使用在Android原始碼上,
OKHttp使用時必須在子執行緒中執行,
二、GET和POST請求
(一)步驟展示
1 依賴
對應的build.gradle檔案

專案清單檔案

2 布局

3 代碼
MainActivity.java
package com.example.testokhttp;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.io.IOException;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static final int GET = 1;
private static final int POST = 2;
private Button btnGet,btnPost;
private TextView tvResult;
private OkHttpClient client = new OkHttpClient();
//解決不能在子執行緒中顯示在文本上
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case GET:
tvResult.setText((String) msg.obj);//獲取資料
break;
case POST:
tvResult.setText((String) msg.obj);//獲取資料
break;
}
}
};
//編碼配置
public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//獲取控制元件
btnGet = findViewById(R.id.btn_get);
btnPost = findViewById(R.id.btn_post);
tvResult = findViewById(R.id.tv_result);
//設定點擊事件
btnGet.setOnClickListener(this);
btnPost.setOnClickListener(this);
}
@Override
//點擊事件
public void onClick(View v) {
switch (v.getId()){
//使用原生的okhttp請求網路資料-get、post
case R.id.btn_get:
getDataFromGet();
break;
case R.id.btn_post:
getDataFromPost();
break;
}
}
//開啟子執行緒,調get方法
private void getDataFromGet() {
//new一個子執行緒
new Thread(){
@Override
public void run() {
super.run();
try {
String result = get("http://wwww.baidu.com");
Message msg = Message.obtain();
msg.what = GET;
msg.obj = result;//攜帶回傳的資料
handler.sendMessage(msg);//發到這
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
//開啟子執行緒,調post方法
private void getDataFromPost() {
//new一個子執行緒
new Thread(){
@Override
public void run() {
super.run();
try {
String result = post("https://api.github.com/markdown/raw","");
Message msg = Message.obtain();
msg.what = POST;
msg.obj = result;//攜帶回傳的資料
handler.sendMessage(msg);//發到這
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
//異步GET請求-默認get請求
private String get(String url) throws IOException{
Request request = new Request.Builder()
.url(url)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
}
//post請求
//引數-json:上傳資料時需要
private String post(String url, String json) throws IOException{
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(url)
.post(body)//
.build();
Response response = client.newCall(request).execute();
return response.body().string();
}
}
(二)效果展示
運行結果如下,

明天繼續,
補充
1、Okhttp3基本使用
2、Socket技術詳解
3、下載地址
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/256828.html
標籤:其他
上一篇:Android集成友盟推送
下一篇:Android Framework 常見解決方案(12)生成系統簽名 & 安卓原始碼編譯自定義SDK android.jar
