-
关于OkHttp
okhttp是一个第三方类库,用于android中请求网络。
HTTP是现代应用程序网络的方式。这就是我们交换数据和媒体的方式。有效地执行HTTP可使内容加载更快并节省带宽。
OkHttp是默认情况下有效的HTTP客户端:
- HTTP / 2支持允许对同一主机的所有请求共享一个套接字。
- 连接池可减少请求延迟(如果HTTP / 2不可用)。
- 透明的GZIP缩小了下载大小。
- 响应缓存可以完全避免网络重复请求。
OkHttp的使用很容易。它的请求/响应API具有流畅的构建器和不变性。它支持同步阻塞调用和带有回调的异步调用。
-
关键步骤
-
在build.gradle添加依赖
implementation 'com.squareup.okhttp3:okhttp:3.4.1'
- 在AndroidManifest.xml申请权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
- 在对应的xml布局文件设置布局
这里将其布局到之前数据库操作对应的界面中,需要设置三个button以及一个imageview
- 在对应Fragment.java文件写响应处理函数
将对应的组件绑定
button1=view.findViewById(R.id.bt_click1);
button2=view.findViewById(R.id.bt_click2);
button3=view.findViewById(R.id.bt_click3);
imageView=view.findViewById(R.id.imageView);
将组件绑定各自的响应函数
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
testGet1();
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
testPost();
}
});
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
testpng();
}
});
button1响应函数:
//创建OkHttpClient实例对象
OkHttpClient okHttpClient = new OkHttpClient();
//创建Request对象
Request request = new Request.Builder()
.url("ss1.bdstatic.com/get?id=111")
.addHeader("key","value")
.get()
.build();
//执行Request请求
//异步请求
okHttpClient.newCall(request).enqueue(new Callback() {
public void onFailure(Call call, IOException e) {
//请求失败
}
public void onResponse(Call call, Response response) throws IOException {
//请求成功
Log.d("TestOkHttp",response.body().string());
}
button2响应函数:
//1、创建OkHttpClient对象实例
OkHttpClient okHttpClient = new OkHttpClient();
//2、创建Request对象
MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
RequestBody requestBody = RequestBody.create(mediaType,"{}");
Request request = new Request.Builder()
.url("ss1.bdstatic.com/post")
.post(requestBody)
.build();
//3、执行Request请求
okHttpClient.newCall(request).enqueue(new Callback() {
public void onFailure(Call call, IOException e) {
//请求失败
}
public void onResponse(Call call, Response response) throws IOException {
//请求成功
Log.d("TestOkHttpPost",response.body().string());
}
});
button3响应函数:
//1、创建OkHttpClient对象实例
OkHttpClient okHttpClient = new OkHttpClient();
//2、创建Request对象
MediaType mediaType = MediaType.parse("image/jpg; charset=utf-8");
RequestBody requestBody = RequestBody.create(mediaType,"{}");
Request request = new Request.Builder()
.url("wx4.sinaimg.cn/mw690/001Sz…")
.get()
.build();
//3、执行Request请求
okHttpClient.newCall(request).enqueue(new Callback() {
public void onFailure(Call call, IOException e) {
//请求失败
}
public void onResponse(Call call, final Response response) throws IOException {
final MediaType contenttype = response.body().contentType();
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
Drawable drawable = Drawable.createFromStream(response.body().byteStream(),"image.png");
drawable.setBounds(0,0,1000,1000);
imageView.setImageDrawable(drawable);
}
});
//请求成功
}
});
-
效果展示