在项目开发中常常需要用到网络,好的网络框架可以帮我们节省很多时间,今天我们就来搭建一个简单的拓展性高的网络框架。
1. 首先我们定义一个类作为网络接口类:
网络请求监听2. 新建一个网络请求管理类,在这个类里面搭建我们的网络请求框架,首先新建刚才的接口实例,以及一个handler 用来传递数据。
请求管理类3. 创建结构体,传入接口:
在这里,说一下looper.getmainLooper():
如果你不带参数的实例化:Handler handler = new Handler();那么这个会默认用当前线程的looper
一般而言,如果你的Handler是要来刷新操作UI的,那么就需要在主线程下跑。
情况:
1).要刷新UI,handler要用到主线程的looper。那么在主线程 Handler handler = new Handler();,如果在其他线程,也要满足这个功能的话,要Handler handler = new Handler(Looper.getMainLooper());
2).不用刷新ui,只是处理消息。 当前线程如果是主线程的话,Handler handler = new Handler();不是主线程的话,Looper.prepare(); Handler handler = new Handler();Looper.loop();或者Handler handler = new Handler(Looper.getMainLooper());
若是实例化的时候用Looper.getMainLooper()就表示放到主UI线程去处理。
如果不是的话,因为只有UI线程默认Loop.prepare();Loop.loop();过,其他线程需要手动调用这两个,否则会报错。
然后利用OKHTTP请求数据:
public void sendPost(Map params) {
OkHttpClient okHttpClient =new OkHttpClient();
if (params ==null) {
params =new HashMap<>();
}
//String url = "http://10.205.17.158:8888/msspApi/api/deliver/dspace/material/appreq.json";
String url ="http://112.74.163.95:8870/msspApi/api/deliver/dspace/material/appreq.json";
FormBody.Builder formBody =new FormBody.Builder();//创建表单请求体
for (Map.Entry map : params.entrySet()) {
String key = map.getKey();
String value;
/**
* 判断值是否是空的
*/
if (map.getValue() ==null) {
value ="";
}else {
value = map.getValue();
}
/**
* 把key和value添加到formbody中
*/
formBody.add(key, value);
}
Request request =new Request.Builder()
.url(url)
.post(formBody.build())
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
final String err = e.toString();
mhandler.post(new Runnable() {
@Override
public void run() {
icallback.netError(err);
}
});
}
@Override
public void onResponse(Call call, Response response)throws IOException {
String resp = response.body().string();
try {
final JSONObject jsonObject =new JSONObject(resp);
final String msg = jsonObject.get("msg").toString();
final String code = jsonObject.get("code").toString();
final String data = jsonObject.getJSONObject("data").toString();
if ("0".endsWith(code)) {
mhandler.post(new Runnable() {
@Override
public void run() {
try {
icallback.success(data);
}catch (JSONException e) {
e.printStackTrace();
}
}
});
}else {
mhandler.post(new Runnable() {
@Override
public void run() {
icallback.reqError(code, msg);
}
});
}
}catch (JSONException e) {
e.printStackTrace();
icallback.reqError("", "json解析异常");
}
}
});
}
初始化请求接口:
请求数据,并执行回调:
至此,完成简易网络请求框架的搭建~~
网友评论