19软件2班 okhttp
添加依赖
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
异步请求
// okhttp的异步get请求
private void useAsynGet() {
OkHttpClient okHttpClient = new OkHttpClient();
String url = "http://www.qq.com";
Request request = new Request.Builder().url(url).get().build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.e("useAsynGet", e.toString());
}
@Override
public void onResponse(Call call, okhttp3.Response response) throws IOException {
String content = response.body().string();
Log.e("useAsynGet",content);
// 不能直接调用 现在还是在子线程
// tv_show.setText(content);
}
});
}
同步请求
// okhttp的同步get请求
private void useSyncGet() {
OkHttpClient okHttpClient = new OkHttpClient();
String url = "http://www.qq.com";
Request request = new Request.Builder().url(url).get().build();
Call call = okHttpClient.newCall(request);
new Thread(new Runnable() {
@Override
public void run() {
try {
okhttp3.Response response = call.execute();
String content = response.body().string();
Log.e("useSyncGet", content);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
将内容显示在屏幕上
使用消息机制
// okhttp的异步get请求
private void useAsynGet() {
OkHttpClient okHttpClient = new OkHttpClient();
String url = "http://www.qq.com";
Request request = new Request.Builder().url(url).get().build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.e("useAsynGet", e.toString());
}
@Override
public void onResponse(Call call, okhttp3.Response response) throws IOException {
String content = response.body().string();
Log.e("useAsynGet",content);
// 不能直接调用 现在还是在子线程
// tv_show.setText(content);
// 发消息到主线程
Message message = new Message();
message.what = MSG_WEB_CONTENT;
message.obj = content;
myHandler.sendMessage(message);
}
});
}
初始化Handler 处理消息
// 初始化Handler
private void initHandler() {
myHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(@NonNull Message msg) {
if(msg.what == MSG_WEB_CONTENT){
String content = (String) msg.obj;
tv_show.setText(content);
return true;
}
return false;
}
});
}
使用get查询归属地
// okhttp的异步get请求
private void useAsynGet() {
OkHttpClient okHttpClient = new OkHttpClient();
// String url = "http://www.qq.com";
String url = "http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode=13800138000&userID=";
Request request = new Request.Builder().url(url).get().build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.e("useAsynGet", e.toString());
}
@Override
public void onResponse(Call call, okhttp3.Response response) throws IOException {
String content = response.body().string();
Log.e("useAsynGet",content);
// 不能直接调用 现在还是在子线程
// tv_show.setText(content);
// 发消息到主线程
Message message = new Message();
message.what = MSG_WEB_CONTENT;
message.obj = content;
myHandler.sendMessage(message);
}
});
}
使用Post方式查询归属地
// 使用post方式查询归属地
private void useOkhttpPost() {
String url = "http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo";
// "?mobileCode=13800138000&userID="; 通过post参数提交
RequestBody requestBody = new FormBody.Builder()
.add("mobileCode", "13456789999")
.add("userID","")
.build();
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder().url(url).post(requestBody).build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.e("useOkhttpPost", e.toString());
}
@Override
public void onResponse(Call call, okhttp3.Response response) throws IOException {
String content = response.body().string();
Log.e("useOkhttpPost", content);
// 发消息到主线程
Message message = new Message();
message.what = MSG_WEB_CONTENT;
message.obj = content;
myHandler.sendMessage(message);
}
});
}
使用okhttp获取图片
// 使用okhttp获取并显示图片
private void useOkhttpGetImage() {
String url = "http://www.gdcp.edu.cn/service?token=5a5d0c3fa9a145719be5b98f7b49eb56";
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder().url(url).get().build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.e("useOkhttpGetImage", e.toString());
}
@Override
public void onResponse(Call call, okhttp3.Response response) throws IOException {
Log.e("useOkhttpGetImage", response.message());
InputStream inputStream = response.body().byteStream();
// 怎么把流转成图片
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
// 此时还在子线程
// iv_show.setImageBitmap(bitmap);
// 通过消息发送到主线程
Message message = new Message();
message.what = MSG_GET_IMG;
message.obj = bitmap;
myHandler.sendMessage(message);
}
});
}
使用Hanlder处理消息 显示图片
// 初始化Handler
private void initHandler() {
myHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(@NonNull Message msg) {
if(msg.what == MSG_WEB_CONTENT){
String content = (String) msg.obj;
tv_show.setText(content);
return true;
}
if(msg.what == MSG_GET_IMG){
Bitmap bitmap = (Bitmap) msg.obj;
iv_show.setImageBitmap(bitmap);
return true;
}
return false;
}
});
}