OKHttp|OKHttp 的基本封装
//封装的工具类 package
com.example.okhttp_fenzhuang.util;
import
android.os.Handler;
import
java.io.IOException;
import
java.util.Map;
import
java.util.Set;
import
java.util.concurrent.TimeUnit;
import
okhttp3.Call;
import
okhttp3.Callback;
import
okhttp3.FormBody;
import
okhttp3.OkHttpClient;
import
okhttp3.Request;
import
okhttp3.RequestBody;
import
okhttp3.Response;
public class
RequestDataUtil { private static
OkHttpClient
client
;
private static
Handler
handler
;
//构造方法 private
RequestDataUtil() { client
=
new
OkHttpClient.Builder() .connectTimeout(
10
, TimeUnit.
SECONDS
) .writeTimeout(
10
, TimeUnit.
SECONDS
) .readTimeout(
10
, TimeUnit.
SECONDS
) .build();
handler
=
new
Handler();
} private static final
RequestDataUtil
dataUtil
=
new
RequestDataUtil();
public static
RequestDataUtil getInstance(){ return
dataUtil
;
} //定义接口 public interface
IcallBack{ void
onResponse(String jsonData);
//请求数据是Json数据时使用 } public interface
IcallBack2{ void
onResponse(
byte
[] bytes);
//请求数据是时使用 } public interface
IcallBack3{ void
onResponse(String jsonData);
//请求数据是Json数据时使用 } //将编程的代码运行到主线程中 //处理请求网络成功的方法,返回的结果是Json字符串 public static void
requestJsonDataOk(
final
String jsonData,
final
IcallBack icallBack){ handler
.post(
new
Runnable() { @Override public void
run() { if
(
icallBack
!=
null
){ icallBack
.onResponse(
jsonData
);
} } });
} public static void
requestJsonDataOk3(
final
String jsonData,
final
IcallBack3 icallBack){ handler
.post(
new
Runnable() { @Override public void
run() { if
(
icallBack
!=
null
){ icallBack
.onResponse(
jsonData
);
} } });
} //处理请求网络成功的方法,返回的结果是byte数组 public static void
requestByteOk(
final byte
[] bytes,
final
IcallBack2 icallBack){ handler
.post(
new
Runnable() { @Override public void
run() { if
(
icallBack
!=
null
){ icallBack
.onResponse(
bytes
);
} } });
} //------------------------------------------------------------------------------------------------------- //提供外部调用的方法 /** * 请求指定的URL返回的结果是Json字符串 */ public static void
setRequestJsonData(String myUrl,
final
IcallBack icallBack){ Request request =
new
Request.Builder().url(myUrl).build();
Call call =
client
.newCall(request);
call.enqueue(
new
Callback() { @Override public void
onFailure(Call call, IOException e) { //请求失败 } @Override public void
onResponse(Call call, Response response)
throws
IOException { //请求成功 String jsonData = https://www.it610.com/article/response.body().string();
requestJsonDataOk
(jsonData,
icallBack
);
//调用请求成功时执行的方法 } });
} /** * 请求指定的URL返回的结果是byte数组 */ public static void
setRrequestByte(String myUrl,
final
IcallBack2 icallBack){ Request request =
new
Request.Builder().url(myUrl).build();
Call call =
client
.newCall(request);
call.enqueue(
new
Callback() { @Override public void
onFailure(Call call, IOException e) {} @Override public void
onResponse(Call call, Response response)
throws
IOException { byte
[] bytes = response.body().bytes();
requestByteOk
(bytes,
icallBack
);
//调用请求成功时执行的方法 } });
} /** * 请求指定的URL返回的结果是Json字符串 这个是提交表单 */ public static void
setRequestJsonData3(String myUrl, Map map,
final
IcallBack3 icallBack3){ //创建表单 FormBody.Builder builder =
new
FormBody.Builder();
//得到map集合当中的数据 for
(Map.Entry entry : map.entrySet() ) { builder.add(entry.getKey(),entry.getValue());
} RequestBody requestBody = builder.build();
Request request =
new
Request.Builder().post(requestBody).url(myUrl).build();
Call call =
client
.newCall(request);
call.enqueue(
new
Callback() { @Override public void
onFailure(Call call, IOException e) {} @Override public void
onResponse(Call call, Response response)
throws
IOException { //请求成功 String jsonData = response.body().string();
requestJsonDataOk3
(jsonData,
icallBack3
);
//调用请求成功时执行的方法 } });
} } //网络请求的工具类
------------------------------------------------------------------ package
com.example.okhttp_fenzhuang;
import
android.graphics.Bitmap;
import
android.graphics.BitmapFactory;
import
android.support.v7.app.AppCompatActivity;
import
android.os.Bundle;
import
android.util.Log;
import
android.view.View;
import
android.widget.Button;
import
android.widget.ImageView;
import
android.widget.TextView;
import
com.example.okhttp_fenzhuang.util.RequestDataUtil;
import
com.google.gson.Gson;
import
java.util.HashMap;
public class
MainActivity
extends
AppCompatActivity
implements
View.OnClickListener {
private
Button
btn_img
;
private
Button
btn_log
;
private
Button
btn_request
;
private
ImageView
imageView
;
private
TextView
txt_content
;
private
String
myUrlJson
=
"http://api.tianapi.com/world/?key=55acaf346503d8d5f98af8dec90ceb01&num=10"
;
private
String
muUrlImg
=
"http://s13.sinaimg.cn/mw690/003WdrRCty6DP7FOPi48c&690"
;
private
String
muUrlPost
=
"https://www.zhaoapi.cn/user/getUserInfo"
;
@Override protected void
onCreate(Bundle savedInstanceState) { super
.onCreate(savedInstanceState);
setContentView(R.layout.
activity_main
);
initView();
//初始化 }
private void
initView() { //获取资源id btn_img
= findViewById(R.id.
btn_img
);
。。。。。。。。。自己写 }
@Override public void
onClick(View view) { //得到网络请求的工具类 RequestDataUtil dataUtil = RequestDataUtil.
getInstance
();
switch
(view.getId()){ case
R.id.
btn_img
:
//下载图片 dataUtil.
setRrequestByte
(
muUrlImg
,
new
RequestDataUtil.IcallBack2() { @Override public void
onResponse(
byte
[] bytes) { Bitmap bitmap = BitmapFactory.
decodeByteArray
(bytes,
0
, bytes.
length
);
imageView
.setImageBitmap(bitmap);
} });
break
;
case
R.id.
btn_log
:
//模拟登陆Post请求 HashMap map =
new
HashMap<>();
map.put(
"uid"
,
"123"
);
map.put(
"id"
,
"7"
);
dataUtil.
setRequestJsonData3
(
muUrlPost
, map,
new
RequestDataUtil.IcallBack3() { @Override public void
onResponse(String jsonData) { Gson gson =
new
Gson();
MyGson myGson = gson.fromJson(jsonData, MyGson.
class
);
String msg = myGson.getMsg();
txt_content
.setText(msg);
} });
break
;
case
R.id.
btn_request
:
//请求的是json数据 dataUtil.
setRequestJsonData
(
myUrlJson
,
new
RequestDataUtil.IcallBack() { @Override public void
onResponse(String jsonData) { Log.
d
(
"zzzz"
,
"onResponse: "
+jsonData);
} });
break
;
} } }
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量