OKHttp是现在比较流行的网络请求框架之一,所以今天我们就来简单介绍一下,
但是想要使用OKHttp,需要添加依赖,
因为是网络请求,所有一定不要忘记在清单文件中添加网络权限,避免不必要的麻烦,
一、利用OKHttp来完成同步的get请求,
// 利用OkHttp完成同步get请求
public class MainActivity extends AppCompatActivity {
//首先定义OKHttp
private OkHttpClient client;
private String url = "http://www.baidu.com";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化
client = new OkHttpClient();
new Thread(new Runnable() {//由于OKHttp等同于HttpURLConnection,因此需要在线程中执行
@Override
public void run() {
try {
syncGet();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
//利用OKHttp来完成同步的get请求
private void syncGet() throws IOException {
//创建一个网络请求
Request request = new Request.Builder().url(url).build();
//同步请求,会返回响应,execute
Response response = client.newCall(request).execute();
//如果请求成功后
if (response.isSuccessful()) {
Looper.prepare();//Looper在线程中,将消息加入到消息队列,打出吐司来测试
Toast.makeText(this, response.body().string(), Toast.LENGTH_SHORT).show();
Looper.loop();
}
}
}
二、利用OKHttp来完成异步的get请求,
//通过OKHttp来进行异步的get请求
public class MainActivity extends AppCompatActivity {
//定义OkHttp
private OkHttpClient client;
private String url = "http://www.baidu.com";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化
client = new OkHttpClient();
asynGet();
}
private void asynGet() {
//创建一个网络请求
Request request = new Request.Builder().url(url).build();
//异步请求.CallBack里面封装了线程
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
Log.d("MainActivity", response.body().string());
}
});
}
}
三、通过OKHttp来完成get的请求头,
//通过OKHttp来完成get请求头
public class MainActivity extends AppCompatActivity {
//定义
private OkHttpClient client;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化
client = new OkHttpClient();
tv = (TextView) this.findViewById(R.id.tv);
withHeadGet();
}
private void withHeadGet() {//APIKey是在api store中找的,在那里可以找到你需要的,下面的这个星号是代表电话号码,
String apiKey = "7ed1315843f4f062bbbcf33d57e3899b";
String headerUrl = "http://apis.baidu.com/apistore/mobilenumber/mobilenumber?phone=151*******";
//创建一个请求
final Request request = new Request.Builder().url(headerUrl).addHeader("apiKey", apiKey).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(final Response response) throws IOException {
tv.post(new Runnable() {
@Override
public void run() {
try {
tv.setText(response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
});
}
}
可以看页面上显示的效果,
四、通过OKHttp来完成post的异步请求,
//通过OKHttp来完成post的异步请求
public class MainActivity extends AppCompatActivity {
//定义
private TextView tv;
private OkHttpClient client;
private Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if (msg.what == 1) {
tv.setText((String) msg.obj);
}
return false;
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化
client = new OkHttpClient();
tv = (TextView) findViewById(R.id.tv);
postRequest();
}
private void postRequest() {
String postURl = “你要请求的网址";
//post请求需要请求体,根据你请求的网址,来填写请求体
FormEncodingBuilder builder = new FormEncodingBuilder();
builder.add("token", "");
builder.add("device_type", "2");
//创建请求体
RequestBody body = builder.build();
//创建请求
Request request = new Request.Builder().url(postURl).post(body).build();
//发出异步的post请求
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
//通过handler来发送消息
Message message = new Message();
message.what = 1;
message.obj = response.body().string();
handler.sendMessage(message);
}
});
}
}
五、通过OKHttp来完成post的同步请求,
//通过OKHttp来完成post的同步请求
public class MainActivity extends AppCompatActivity {
//定义
private TextView tv;
private OkHttpClient client;
private Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if (msg.what == 1) {
tv.setText((String) msg.obj);
}
return false;
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化
client = new OkHttpClient();
tv = (TextView) findViewById(R.id.tv);
new Thread(new Runnable() {
@Override
public void run() {
postRequest();
}
}).start();
}
private void postRequest() {
String postURl = “你想要请求的网址";
//post请求需要请求体,根据你请求的网址,来填写请求体
FormEncodingBuilder builder = new FormEncodingBuilder();
builder.add("token", "");
builder.add("device_type", "2");
//创建请求体
RequestBody body = builder.build();
//创建请求
Request request = new Request.Builder().url(postURl).post(body).build();
//响应
Response response = null;
try {
response = client.newCall(request).execute();
//发出同步的post请求
if (response.isSuccessful()) {
//通过handler来发送消息
Message message = new Message();
message.what = 1;
message.obj = response.body().string();
handler.sendMessage(message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上是对OKHttp的简单使用做的介绍,以上代码只作为参考,
本人菜鸟一个,有什么不对的地方希望大家指出评论,大神勿喷,大家一起努力进步!