基于OkHttp的简单网络编程

179 阅读2分钟
  • 关于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);

}

});

//请求成功

}

});

  • 效果展示

[参考网址](https://square.github.io/okhttp/)

[源码地址](https://github.com/learnway299/YouSee/blob/master/app/src/main/java/edu/hubu/yousee/youseeFragment.java)