uniapp 原生android插件实现get和post请求

简介: uniapp 原生android插件实现get和post请求

前言


由于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请求测试结果如下:

ad446cfd4d274f359fe47389bb377112.jpeg

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请求测试结果如下:

0c075b65ebd24acea9456d164840a5a5.jpeg

参考


目录
相关文章
|
3月前
|
缓存 程序员 定位技术
Android Studio 插件,那些被大厂优化的程序员们
Android Studio 插件,那些被大厂优化的程序员们
|
3月前
|
JavaScript Java Android开发
uniapp通过蓝牙传输数据 (安卓)
uniapp通过蓝牙传输数据 (安卓)
161 1
|
3月前
|
开发者 iOS开发
UniApp打包教程:使用HBuilder X和AppUploader完成原生App云打包和上架指南“
UniApp打包教程:使用HBuilder X和AppUploader完成原生App云打包和上架指南“
190 3
|
7天前
|
开发工具 Android开发
|
7天前
uniApp——调整uniApp插件市场上的echarts插件
uniApp——调整uniApp插件市场上的echarts插件
6 0
|
1月前
uniapp 打包成 apk(原生APP-云打包)免费
uniapp 打包成 apk(原生APP-云打包)免费
71 1
|
27天前
|
消息中间件 调度 Android开发
Android经典面试题之View的post方法和Handler的post方法有什么区别?
本文对比了Android开发中`View.post`与`Handler.post`的使用。`View.post`将任务加入视图关联的消息队列,在视图布局后执行,适合视图操作。`Handler.post`更通用,可调度至特定Handler的线程,不仅限于视图任务。选择方法取决于具体需求和上下文。
27 0
|
1月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的高校后勤网上报修系统安卓app附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的高校后勤网上报修系统安卓app附带文章源码部署视频讲解等
29 0
|
3月前
|
Android开发 UED 开发者
【Uniapp 专栏】比较 Uniapp 与原生开发的差异与适用场景
【5月更文挑战第15天】UniApp与原生开发各有千秋。UniApp以高效跨平台著称,一套代码覆盖多平台,降低开发成本,适合快速开发简单应用。原生开发则提供优秀性能和用户体验,适合对性能要求高的复杂应用。两者在功能实现和维护上各有优势,开发者需根据项目需求权衡选择。随着技术进步,两者都在不断优化,为移动应用开发带来新机遇。
191 1
【Uniapp 专栏】比较 Uniapp 与原生开发的差异与适用场景
|
2月前
|
JSON 编解码 Apache
Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
32 1