本篇概述:
1 使用Nodejs写一个简易的API接口,支持Get、Post、Put、Patch、Delete五种方法,并部署在自己服务器,供大家调用
2 在Client端支持上述五种请求,并返回请求时带的参数
Activity代码主要如下:
1 Activity添加按钮,并给按钮添加监听事件
HttpUtil修改如下:
public class HttpUtil {
/**
* Get请求
*/
public static void get (String rootPath, RequestParams params, final LincolnCallBack<JSONObject> callBack) {
String rootUrl = GlobalUtil.ROOTURL.concat(rootPath);
rootUrl = UrlUtil.dealGetParams(rootUrl, params);
TaskController taskController = TaskController.registrInstance();
taskController.start(rootUrl, HttpMethod.GET, params, callBack);
}
/**
* Post请求
*/
public static void post (String rootPath, RequestParams params, final LincolnCallBack<JSONObject> callBack) {
String rootUrl = GlobalUtil.ROOTURL.concat(rootPath);
TaskController taskController = TaskController.registrInstance();
taskController.start(rootUrl, HttpMethod.POST, params, callBack);
}
/**
* Put请求
*/
public static void put (String rootPath, RequestParams params, final LincolnCallBack<JSONObject> callBack) {
String rootUrl = GlobalUtil.ROOTURL.concat(rootPath);
TaskController taskController = TaskController.registrInstance();
taskController.start(rootUrl, HttpMethod.PUT, params, callBack);
}
/**
* Patch请求
*/
public static void patch (String rootPath, RequestParams params, final LincolnCallBack<JSONObject> callBack) {
String rootUrl = GlobalUtil.ROOTURL.concat(rootPath);
TaskController taskController = TaskController.registrInstance();
taskController.start(rootUrl, HttpMethod.PATCH, params, callBack);
}
/**
* Delete请求
*/
public static void delete (String rootPath, RequestParams params, final LincolnCallBack<JSONObject> callBack) {
String rootUrl = GlobalUtil.ROOTURL.concat(rootPath);
TaskController taskController = TaskController.registrInstance();
taskController.start(rootUrl, HttpMethod.DELETE, params, callBack);
}
}
线程管理类:
public class TaskController {
private static TaskController taskController;
private static ExecutorService executor;
private static int MAX_THREAD_COUNT= 10 ;
public static TaskController registrInstance (){
if (taskController == null ) {
synchronized (TaskController.class) {
if (taskController == null ) {
taskController = new TaskController();
executor = Executors.newFixedThreadPool(MAX_THREAD_COUNT);
}
}
}
return taskController;
}
public <T> void start (String rootUrl,HttpMethod method ,RequestParams params ,LincolnCallBack<JSONObject> callback){
LogUtil.d("url:" +rootUrl);
HttpTask task = new HttpTask(rootUrl,method, params ,callback);
executor.submit(task);
}
}
任务线程类:
public class HttpTask implements Runnable{
private String rootUrl;
private LincolnCallBack callBack;
private HttpMethod method;
private RequestParams params;
public HttpTask(String rootUrl,HttpMethod method,RequestParams params,LincolnCallBack callback){
this.rootUrl = rootUrl;
this.callBack = callback;
this.params = params;
this.method = method;
}
public void sendRequest(){
try {
URL url = new URL(rootUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod(method.toString());
if (method != HttpMethod.GET) {
urlConnection.setDoOutput(true);
byte[] bytes = params.toString`这里写代码片`().getBytes();
urlConnection.getOutputStream().write(bytes);
}
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
ByteArrayOutputStream byteOutSteam = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length = -1;
while ((length = inputStream.read(buffer)) != -1) {
byteOutSteam.write(buffer, 0, length);
}
String resultString = byteOutSteam.toString();
JSONObject object = new JSONObject(resultString);
callBack.onSuccess(null, object);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void run() {
sendRequest();
}
}