写点什么

android okhttp 异步请求使用详解 (2)

发布于: 2021 年 11 月 06 日


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


post 提交请求](about:blank#2post_84)



一、OKHttp 简介


=====================================================================


OkHttp 是一款高效的 HTTP 客户端,内部依赖 okio,它有以下优点:


  • HTTP/2 支持允许对同一主机的所有请求共享同一个 socket。

  • 连接池可减少请求延迟(如果 HTTP/2 不可用)。

  • 透明 GZIP 可缩小下载大小。

  • 响应缓存可完全避免重复请求的网络。


okhttp 导入




okhttp官网地址


OkHttp 3.12.x 及以下的版本支持 Android 2.3+(API 级别 9+)和 Java 7+。同时还要导入 okhttp 依赖的 okio 库,而 Okio 在 1.x 版本是基于 Java 实现的,2.x 则是 Kotlin 实现的。这里我的 Android 版本是 2.3,基于 Java 实现。


在项目中的 app 目录下的 build.gradle 文件中添加以下代码


dependencies { // okhttp3 的依赖


compile 'com.squareup.okhttp3:okhttp:3.8.1'


compile 'com.squareup.okio:okio:1.12.0'}


在 AndroidManifest.xml 中添加网络权限 :


<uses-permission android:name="android.permission.INTERNET"/>


okhttp 主要功能




  • 联网请求文本数据

  • 大文件下载上传

  • 请求图片


二、okhttp 基本使用


=======================================================================


1.发起 get 异步请求




布局文件很简单,只有几个按钮


public class MainActivity extends AppCompatActivity {


private static final String TAG = "MainActivity ";


private Button btn;


@Override


protected void onCreate(Bundle savedInstanceState) {


super.onCreate(savedInstanceState);


setContentView(R.layout.activity_main);


btn= (Button) findViewById(R.id.btn);


btn.setOnClickListener(new View.OnClickListener() {


@Override


public void onClick(View v) {


try{


getRequest("http://api.m.mtime.cn/PageSubArea/TrailerList.api");


}catch(IOException e)


{


e.printStackTrace();


}


}


});


}


/*


get 请求


url 网络连接


*/


public void getRequest(String url) throws IOException {


//要有一个客户端,类似于要有一个浏览器


OkHttpClient client = new OkHttpClient.Builder()


.build();


//创建请求内容


Request request = new Request.Builder()


.get()


.url(url)


.build();


//用 client 去创建请求任务


okhttp3.Call task=client.newCall(request);


//异步请求,发起请求可以继续做其他事情(同步请求,发起请求之后要等数据回来)


task.enqueue(new Callback() {


@Override


public void onFailure(okhttp3.Call call, IOException e) {


Log.d(TAG,"onFailure->"+e.toString());


}


@Override


public void onResponse(okhttp3.Call call, Response response) throws IOException {


ResponseBody body=response.body();


Log.d(TAG,"onSuccess->"+body.string());


}


});


}


}


运行结果,点击按钮后,logcat 打印出获取的内容



2.发起 post 提交请求




post 请求和 get 请求不同的是 post 需要一个 RequestBody 的参数。RequestBody 是一个抽象类,分别有 FormBody 和 MultipartBody 两个子类。FormBody,用于传输表单类型的参数。MultipartBody 则支持多类型的参数传递。


public void post(String url){

评论

发布
暂无评论
android okhttp异步请求使用详解 (2)