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

参考


目录
相关文章
|
2月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
202 4
|
2月前
|
SQL 人工智能 Dart
Android Studio的插件生态非常丰富
Android Studio的插件生态非常丰富
88 1
|
8月前
|
缓存 程序员 定位技术
Android Studio 插件,那些被大厂优化的程序员们
Android Studio 插件,那些被大厂优化的程序员们
|
5月前
|
Android开发
错误记录:调用原生TvSettings 的 com.android.tv.settings.device.storage.ResetActivity 无法启动
本文记录了一个Android TV设置中由于未设置`android:exported="true"`导致`com.android.tv.settings.device.storage.ResetActivity`无法被第三方app启动的错误,并通过添加该属性成功解决了问题。
76 1
|
5月前
|
存储 安全 Android开发
"解锁Android权限迷宫:一场惊心动魄的动态权限请求之旅,让你的应用从平凡跃升至用户心尖的宠儿!"
【8月更文挑战第13天】随着Android系统的更新,权限管理变得至关重要。尤其从Android 6.0起,引入了动态权限请求,增强了用户隐私保护并要求开发者实现更精细的权限控制。本文采用问答形式,深入探讨动态权限请求机制与最佳实践,并提供示例代码。首先解释了动态权限的概念及其重要性;接着详述实现步骤:定义、检查、请求权限及处理结果;最后总结了六大最佳实践,包括适时请求、解释原因、提供替代方案、妥善处理拒绝情况、适应权限变更及兼容旧版系统,帮助开发者打造安全易用的应用。
87 0
|
3月前
|
Android开发
我是一位Android工程师,用通义灵码的AS插件做开发工作助手,对比之前没有灵码,现在提效了60%
我是一位Android工程师,用通义灵码的AS插件做开发工作助手,对比之前没有灵码,现在提效了60%
85 0
|
4月前
|
存储 API Android开发
"解锁Android权限迷宫:一场惊心动魄的动态权限请求之旅,让你的应用从平凡跃升至用户心尖的宠儿!"
随着Android系统的更新,权限管理成为应用开发的关键。尤其在Android 6.0(API 级别 23)后,动态权限请求机制的引入提升了用户隐私保护,要求开发者进行更精细的权限管理。
81 2
|
8月前
|
安全 Android开发
Android之OKHttp基本使用和OKHttp发送https请求安全认证
Android之OKHttp基本使用和OKHttp发送https请求安全认证
281 0
|
7月前
|
JSON 编解码 Apache
Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
76 1
|
8月前
|
XML Dart Java
Flutter插件开发之APK自动安装,字节跳动Android岗面试题
Flutter插件开发之APK自动安装,字节跳动Android岗面试题