前言
由于Android 4.0 之后不能在主线程中请求HTTP请求,所以请求必须放在子线程中进行。
Http请求方式Get与Post的简介 先来了解Http协议:Http(HyperText Transfer Protocol超文本传输协议)是一个设计来使客户端和服务器顺利进行通讯的协议。 HTTP在客户端和服务器之间以request-response protocol(请求-回复协议)工作。 简单来说呢,Get与Post就是基于http协议的网络数据交互方式。
实现
GET
源码
以下为uniapp原生插件中实现的get请求,android原生可以在去除uniapp相关后使用。
@UniJSMethod(uiThread = true) public void httpGet (final String username, final String password, final UniJSCallback callback) { new Thread(new Runnable(){ @Override public void run() { String path = "http://192.168.0.220:8000/api/android/http/test/get?username="+ username + "&password=" + password; try { URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setConnectTimeout(5000); connection.setRequestMethod("GET"); //获得结果码 int responseCode = connection.getResponseCode(); if(responseCode ==200){ //请求成功 获得返回的流 InputStream is = connection.getInputStream(); // 获取返回结果 int len = -1; byte buf[] = new byte[128]; ByteArrayOutputStream baos = new ByteArrayOutputStream(); while ((len=is.read(buf))!=-1){ baos.write(buf,0,len); } String result = new String(baos.toByteArray()); JSONObject res = JSONObject.parseObject(result); callback.invoke(res); }else { callback.invoke(null); } } catch (IOException e) { e.printStackTrace(); callback.invoke(e.getMessage()); } } }).start(); }
测试
get请求测试结果如下:
POST
源码
以下为uniapp原生插件中实现的post请求,android原生可以在去除uniapp相关后使用。
@UniJSMethod(uiThread = true) public void httpPost (final String username, final String password, final UniJSCallback callback) { new Thread(new Runnable(){ @Override public void run() { String path = "http://192.168.0.220:8000/api/android/http/test"; try { URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setConnectTimeout(5000); connection.setRequestMethod("POST"); String data = "username="+username+"&password="+password; byte[] data_byte = data.getBytes(); connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); connection.setDoOutput(true); OutputStream outputStream = connection.getOutputStream(); outputStream.write(data_byte); int responseCode = connection.getResponseCode(); if(responseCode ==200){ InputStream is = connection.getInputStream(); // 获取返回结果 int len = -1; byte buf[] = new byte[128]; ByteArrayOutputStream baos = new ByteArrayOutputStream(); while ((len=is.read(buf))!=-1){ baos.write(buf,0,len); } String result = new String(baos.toByteArray()); JSONObject res = JSONObject.parseObject(result); callback.invoke(res); }else { callback.invoke(null); } } catch (IOException e) { e.printStackTrace(); callback.invoke(e.getMessage()); } } }).start(); }
测试
post请求测试结果如下: