博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android与Node.js的http数据交互
阅读量:6682 次
发布时间:2019-06-25

本文共 4657 字,大约阅读时间需要 15 分钟。

个人觉得网络数据交互对于任何技术来说都是最好玩的部分,不管是web前端还是Android,因为我觉得当一个应用程序具有和互联网上的资源交互的功能时才真正可以开始做些好玩的事。

而利用http传递Json数据无疑是网络数据交互里最简单,最便捷的方式。

由于正在学习Node.js和Android,这里就先介绍Android和Node.js的Express框架编写的后台之间利用http传递Json数据进行数据交互。


Android里怎样利用Http发送数据

Android里发送Http请求的方式有HttpUrlConnection和HttpClient两种。

HttpUrlConnection在java.net包下,是java原生支持的类,而HttpClient是apache提供的第三方类库,是对HttpUrlConnection的进一步封装,由于性能等原因,Google已不推荐在Android中使用。

这里就用原生的HttpUrlConnection实现一个简单的Http请求:

首先基于HttpUrlConnection实现一个Http工具类,该类实现了通过Http的Get和Post方式获取和发送Json数据的方法:

(注意:这里的HttpCallbackListener是一个自定义的用来将请求成功/失败的回调控制权转移的接口)

//首先基于HttpUrlConnection实现一个Http工具类,该类实现了通过Http的Get和Post方式获取和发送Json数据的方法        public class HttpUtil {            public static void sendGetHttpRequest(final String address, final HttpCallbackListener listener) {            new Thread(new Runnable() {                @Override                public void run() {                    HttpURLConnection connection = null;                        URL url = null;                    try {                        url = new URL(address);                            connection = (HttpURLConnection) url.openConnection();                        connection.setRequestMethod("GET");                        connection.setConnectTimeout(8000);                        connection.setReadTimeout(8000);                        InputStream inputStream = connection.getInputStream();                        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));                        StringBuffer response = new StringBuffer();                        String line;                        while ((line = reader.readLine()) != null) {                            response.append(line);                        }                        if (listener != null) {                            listener.onFinish(response.toString());                        }                    } catch (Exception e) {                        listener.onError(e);                    }                }            }).start();        }            public static void sendPostHttpRequest(final String address,final String jsonBody,final HttpCallbackListener listener){            new Thread(new Runnable() {                @Override                public void run() {                    HttpURLConnection connection=null;                    URL url=null;                        try {                        url = new URL(address);                            connection = (HttpURLConnection) url.openConnection();                        connection.setRequestMethod("POST");                        connection.setConnectTimeout(8000);                        connection.setReadTimeout(8000);                        connection.setRequestProperty("Content-Type","application/json");                            OutputStream outputStream=connection.getOutputStream();                            BufferedWriter requestBody=new BufferedWriter(new OutputStreamWriter(outputStream));                            requestBody.write(jsonBody);                            requestBody.flush();                            requestBody.close();                            InputStream inputStream = connection.getInputStream();                        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));                        StringBuffer response = new StringBuffer();                        String line;                        while ((line = reader.readLine()) != null) {                            response.append(line);                        }                        if (listener != null) {                            listener.onFinish(response.toString());                        }                        } catch (Exception e) {                        listener.onError(e);                    }                }            }).start();        }    }

接下来再Activity中调用刚才的HttpUtil实现数据交互:

(注意:这里的Gson是一个Google提供的Json和java对象之间相互转化的工具)

List
manList=new ArrayList
();Man man=new Man();man.setName("post");man.setAge(20);manList.add(man);manList.add(man);Gson gson=new Gson();String mansjson=gson.toJson(manList);HttpUtil.sendPostHttpRequest("http://192.168.0.100:3000/qzone/ad", mansjson, new HttpCallbackListener() { @Override public void onFinish(String response) { } @Override public void onError(Exception e) { }});

这里没有写请求完成后的响应事件,如果要写关于界面的改动的话要通过Handler将Message发送回主线程。


怎样在Express里获取刚才的数据

这是在Express里设置路由接收刚才发送的Json数据和响应Get请求的方法:

(注意要将该路由注册在app.js中)

router.post('/ad/',function(req,res,next){        for (var i=0;i

如果在路由里console.log(req.body);

可以看到如下数据:
[ { age: 20, name: 'post' }, { age: 20, name: 'post' } ]

转载地址:http://bvaao.baihongyu.com/

你可能感兴趣的文章
javaScript引入方式
查看>>
[摘录]验证视图MAC失败 Validation of ViewState MAC Failed
查看>>
Cocos2D-X屏幕适配新解
查看>>
asp.net mvc生命周期学习
查看>>
C++ explicit关键字避免隐式转换
查看>>
JS判断IE,FF,Opera,Safari等浏览器类型
查看>>
C++读取文件,将文件内容读取到struct中
查看>>
构建之法阅读笔记02
查看>>
HDU 1212 Big Number 【大数求余模拟】
查看>>
静态类(static)与java值传递、引用传递小测
查看>>
小怪受击身体变红特效代码
查看>>
怎样删除数据库表中所有的数据
查看>>
问题 G: 【一本通提高同余问题】计算器
查看>>
2019-06-14 Java学习日记之SQL
查看>>
2018Github用户kamranahmedse分享的开发路线
查看>>
微信支付(20140923更新)商户支付密钥key的生成与设置
查看>>
Python爬虫项目,获取所有网站上的新闻,并保存到数据库中,解析html网页等
查看>>
jQuery validate api(转)
查看>>
053(七十二)
查看>>
DOTNETBAR的使用技巧
查看>>