網站首頁 編程語言 正文
okHttpUtil類封裝
package com.nyw.okhttpjavademo.util;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.logging.HttpLoggingInterceptor;
/**
* OkHttpClient的封裝類
*/
public class OkUtils {
private OkHttpClient okHttpClient;
private OkUtils() {
//日志攔截器
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
okHttpClient = new OkHttpClient.Builder()
.connectTimeout(20, TimeUnit.SECONDS)//響應時間,讀取時間
.readTimeout(20, TimeUnit.SECONDS)
.callTimeout(20, TimeUnit.SECONDS)
.addInterceptor(loggingInterceptor)//添加日志攔截器
.build();
}
//靜態內部類單例模式
public static OkUtils getInstance() {
return OkHolder.okUtils;
}
static class OkHolder {
private static final OkUtils okUtils = new OkUtils();
}
//這是同步的get和post
public String getSync(String url) throws IOException {
Request request = new Request.Builder().url(url).build();
return okHttpClient.newCall(request).execute().body().string();
}
public String postSync(String url, String key, String value) throws IOException {
RequestBody body = new FormBody.Builder().add(key, value).build();
Request request = new Request.Builder().url(url).post(body).build();
return okHttpClient.newCall(request).execute().body().string();
}
//異步的get和post
public void getAsync(String url, Callback callback) {
Request request = new Request.Builder().url(url).build();
okHttpClient.newCall(request).enqueue(callback);
}
public void postAsync(String url, Callback callback) {
RequestBody body = new FormBody.Builder().add("key", "value").build();
Request request = new Request.Builder().url(url).post(body).build();
okHttpClient.newCall(request).enqueue(callback);
}
}
okHttp使用
package com.nyw.okhttpjavademo;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.Headers;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okio.BufferedSink;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btn_get,btn_get_asyn,btn_post,btn_post_asyn,btn_download;
private OkHttpClient okHttpClient;
private Request request;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intiView();
}
private void intiView() {
btn_get=findViewById(R.id.btn_get);
btn_get_asyn=findViewById(R.id.btn_get_asyn);
btn_post=findViewById(R.id.btn_post);
btn_post_asyn=findViewById(R.id.btn_post_asyn);
btn_download=findViewById(R.id.btn_download);
btn_get.setOnClickListener(this);
btn_get_asyn.setOnClickListener(this);
btn_post.setOnClickListener(this);
btn_post_asyn.setOnClickListener(this);
btn_download.setOnClickListener(this);
okHttpClient=new OkHttpClient();
}
@Override
public void onClick(View view) {
int id=view.getId();
switch (id){
case R.id.btn_get:
//get 同步請求,同步請求必須放在線程里執行
new Thread(new Runnable() {
@Override
public void run() {
request = new Request.Builder().url("http://wwww.baidu.com").build();
Call call=okHttpClient.newCall(request);
Response response;
try {
response = call.execute();
Log.i("skfjskfsnfff","execute get同步請求");
if (response.isSuccessful()){
Log.i("skfjskfsnfff","get同步請求");
Log.i("skfjskfsnfff",response.body().byteString().toString());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
break;
case R.id.btn_get_asyn:
//get 異步請求
getAsyn("http://www.baidu.com");
break;
case R.id.btn_post:
//post 同步請求
sendSynchronizationPost("http://www.baidu.com");
break;
case R.id.btn_post_asyn:
//post 異步請求
postData("http://www.baidu.com");
break;
case R.id.btn_download:
//下載文件
break;
}
}
/**
* post 同步請求,同步請求要在線程中執行
*/
private void sendSynchronizationPost(String url) {
new Thread(new Runnable() {
@Override
public void run() {
try {
//1:學什么都能new出一個對象來
OkHttpClient okHttpClient = new OkHttpClient();
//創建請求體
RequestBody requestBody = new FormBody.Builder()
.add("mobile", "18513426687")//鍵值對的形式
.build();
//Request就是請求的類
Request request = new Request.Builder().url(url).post(requestBody).build();
//發送請求newCall方法
Call call = okHttpClient.newCall(request);
//通過call去處理給你響應Response
Response response = call.execute();
final String string = response.body().string();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, string, Toast.LENGTH_SHORT).show();
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
/**
* get 異步請求
* @param url
*/
public void getAsyn(String url) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//訪問錯誤回調
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.isSuccessful()){
//訪問接口成功回調
String result = response.body().string();
Log.i("sdlfmsfklsgnfkff",result);
//處理UI需要切換到UI線程處理
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
isUpdate( isShow);
}
});
}
}
});
}
/**
* post提交表單
*/
private void postData(String url){
OkHttpClient okHttpClient = new OkHttpClient();
RequestBody requestBody = new FormBody.Builder()
.add("search", "Jurassic Park")
.build();
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d("fklsjlfkjsdksfjskfjs", "onFailure: " + e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.d("fklsjlfkjsdksfjskfjs", response.protocol() + " " +response.code() + " " + response.message());
Toast.makeText(MainActivity.this,response.body().toString(),Toast.LENGTH_SHORT).show();
Headers headers = response.headers();
for (int i = 0; i < headers.size(); i++) {
Log.d("fklsjlfkjsdksfjskfjs", headers.name(i) + ":" + headers.value(i));
}
Log.d("fklsjlfkjsdksfjskfjs", "onResponse: " + response.body().string());
}
});
}
}
原文鏈接:https://blog.csdn.net/u013519290/article/details/124397061
相關推薦
- 2022-05-25 <C++>深淺拷貝與初始化列表技巧你真的會了嗎
- 2024-03-24 spring boot 3 + spring cloud sleuth 無法注入Tracer問題
- 2022-04-09 解決使用docker權限不足需要加sudo問題,Got permission denied whil
- 2022-12-25 一文帶你熟悉Go語言中的分支結構_Golang
- 2021-12-15 C/C++?Qt?數據庫與Chart歷史數據展示_C 語言
- 2022-07-01 docker搭建mongodb單節點副本集的實現_docker
- 2022-04-14 Python函數式編程實現登錄注冊功能_python
- 2023-10-10 uniapp實現預覽請求后臺接口返回的文件
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支