文章目录

  • 前言
  • 一、项目思路及结构
  • 二、主要函数
    • 1.Get请求方法
    • 2.Post请求
    • 3.Main函数
    • 4.运行效果
  • 总结

前言

在之前我们已经完成了感知层和网络层的设计,现在我们来完成应用层的设计,这样大概的物联网框架就有了。这边采用APP实现,由于没有花很多时间学习app的设计,所以ui和程序都设计的比较简陋。需要完成设计的小伙伴可以参考前几篇博客。

ESP32驱动震动传感器、MAX4466(感知层)

ESP32通过MQTT协议把数据上传到OntNet平台(网络层)


一、项目思路及结构

1.结构(如下图):

其中http保存的是get请求和post请求的文件夹,json保存的是请求返回json数据解析的文件。

2.思路:
首先我们需要设计一个能够接收信息和发送信息到云平台的应用,使用get请求获取云平台的额数据显示到文本框上,通过按钮发送post请求到云平台,其中get请求获取的是一个json格式的数据如下:

{"errno": 0,"data": {"count": 3,"datastreams": [{"datapoints": [{"at": "2022-09-29 01:22:34.128","value": 326},{"at": "2022-09-29 01:22:32.997","value": 325},{"at": "2022-09-29 01:22:31.967","value": 324}],"id": "data"}]},"error": "succ"
}

所以还要对数据进行解析,由于涉及的细节比较多这里只介绍主要的函数,当然完整工程会在文末分享出来。

二、主要函数

1.Get请求方法

代码如下:

 public  String GetDateMethod(String url){String time=new String();OkHttpClient client = new OkHttpClient();Request request = new Request.Builder().url(url).addHeader("Authorization","version=2018-10-31&res=products%2F417488&et=1700000000&method=md5&sign=2c5X8shBYQAVp%2B7BtJ0iTg%3D%3D")//这里需要生成新的key  我搞了一晚上才发现.build();String responseData="";Response response=null;try {response=client.newCall(request).execute();responseData=response.body().string();} catch (IOException e) {e.printStackTrace();}Log.w("ww","responsedata:"+responseData);return responseData;}

新的密钥生成格式如下:

具体可以查看网络层的文章 其中res的参数是不一样的,key需要在云平台的产品概况找到,如下图:

2.Post请求

代码如下:

 public String PostDataMethod(String commd){OkHttpClient client=new OkHttpClient();String url=String.format("http://api.heclouds.com/v1/synccmds?device_id=997936235&timeout=30"); //api接口只需要把device_id=后面的改成你自己的设备id就可以String body=String.format(commd);Log.e("url",url);Log.e("body",body);RequestBody bodyJson=RequestBody.create(MediaType.parse("application/json;charset=utf-8"),body);Request request = new Request.Builder().url(url).headers(new Headers.Builder().add("Authorization","version=2018-10-31&res=products%2F417488&et=1700000000&method=md5&sign=2c5X8shBYQAVp%2B7BtJ0iTg%3D%3D")  //这里和get请求的一样.build()).post(bodyJson).build();Call call=client.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {Log.e("e","post请求失败");}@Overridepublic void onResponse(Call call, Response response) throws IOException {}});Response response=null;String responseData="";try{response=client.newCall(request).execute();String jsonResStr=response.body().string();Log.e("onenet回应数据",jsonResStr);JSONObject jsonObject=new JSONObject(jsonResStr);responseData=jsonObject.getString("error");Log.e("val",responseData);}catch (Exception e){e.printStackTrace();}return responseData;}

3.Main函数

代码如下:

public class MainActivity extends AppCompatActivity {HttpNetwork httpNetwork = new HttpNetwork();String openRes;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button bt1=findViewById(R.id.button);Button bt2=findViewById(R.id.button2);Button bt3=findViewById(R.id.button3);TextView tw1=findViewById(R.id.textView);//get请求需要用的urlString url="http://api.heclouds.com/devices/997936235/datapoints?datastream_id=data&limit=3";bt1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {new Thread(() -> {Looper.prepare();openRes=httpNetwork.PostDataMethod("1");Toast.makeText(getApplicationContext(),openRes.toString(),Toast.LENGTH_LONG).show();Looper.loop();}).start();}});bt2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {new Thread(() -> {Looper.prepare();openRes=httpNetwork.PostDataMethod("0");Toast.makeText(getApplicationContext(),openRes.toString(),Toast.LENGTH_LONG).show();Looper.loop();}).start();}});bt3.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {new Thread(() -> {Looper.prepare();String data = httpNetwork.GetDateMethod(url);int date= getvalue(data).intValue();Log.i("data", String.valueOf(date));tw1.post(new Runnable() {@Overridepublic void run() {tw1.setText(String.valueOf(date));}});}).start();}});}//json数据解析的函数public Integer getvalue(String responseData){JsonDate data = new Gson().fromJson(responseData, JsonDate.class);List<DatastreamItem> streams = data.getData().getDatastreams();List<DatapointItem> points = streams.get(0).getDatapoints();Integer resultData = new Integer(1);resultData = points.get(0).getValue();return resultData;}
}

4.运行效果

如图:

这里返回了云平台的最新数据!

完整工程链接:https://pan.baidu.com/s/1LZZS_9tlLnPaN-YwgMAHmw?pwd=8888
提取码:8888


总结

上面的程序仅供参考,写的也比较简陋,文笔也不是很好,所以好多东西都表达的不到位,由于涉及的东西比较多,所以就直接把工程分享出来了。到此为止,一个简单的物联网项目设计就完成了,也是在复习之前学习的知识,同时,也欢迎小伙伴们和我一起进行学习交流呀!!!要学习的东西还很多,大家一起加油进步呀!如果觉得是不错分享动动发财的小手点一个赞呀!

最后多看官方给出的文档,如下:
https://open.iot.10086.cn/doc/v5/develop/
https://developer.android.com/

APP通过http获取OneNet数据与命令下发【应用层】相关推荐

  1. 安卓app 获取view的id_隐私保护问题不小 研究表示1325个安卓APP未经授权获取用户数据...

    在今年苹果的WWDC大会上,苹果大谈保护用户的隐私,并暗怼了自己的竞争对手安卓系统在用户隐私保护方面不如苹果.那么安卓操作系统在隐私保护方面真的有问题吗? 由于国内的安卓操作系统没有谷歌的监管,因此在 ...

  2. 猫眼电影App抓包获取评论数据接口

      之前在CSDN程序人生公众号上看到了这篇文章<邪不压正>评分持续走低,上万条网友评论揭秘,是救救姜文还是救救观众?,文中提到了通过抓包猫眼App发现了评论的数据接口:http://m. ...

  3. 微信小程序获取Onenet温湿度数据并控制灯亮灭

    ​ 其实之前就写过类似的文章,但是看过我博客的朋友就知道,我是先写微信小程序获取onenet,然后再写esp32上云到onenet.一篇是ESP32-C3通过MQTT协议把温湿度上传到OneNet平台 ...

  4. java对接移动物联网onenet平台实现接收设备上报数据命令下发

    java对接移动物联网onenet平台实现接收设备上报数据命令下发. 最近由于工作需要,公司设备集成了物联网卡,需要实现数据上报命令下发等(目前集成了电信,移动,联通三个平台).电信和移动都有自己的开 ...

  5. 实时获取股票数据的android app应用程序源码分享

    From:http://www.jb51.net/article/72449.htm 本文我们分享一个实时获取股票数据的android app应用程序源码分享,可以作为学习使用,本文贴出部分重要代码, ...

  6. 微信小程序获取OneNet数据显示温湿度

    微信小程序获取OneNet数据显示温湿度 一.OneNet平台 ​ 1.我这里的设备是通过MQTT协议连接到OneNet平台的 ​ 2.微信小程序获取OneNet数据需要得到产品的api-key.设备 ...

  7. 一个实时获取股票数据的安卓应用程序

    关键字:Stock,股票,安卓,Android Studio. OS:Windows 10. 最近学习Android应用开发,不知道写一个什么样的程序来练练手,正好最近股票很火,就一个App来实时获取 ...

  8. gstreamer 获取帧数据_Android App卡顿率(顺滑度、顺滑度)并整理数据

    概要 测试一个Android App的卡顿率(流畅性.顺滑度)的方法有很多,不同的厂和团队有他们不同的玩法,有的用高速摄像机去评估,有的用肉眼主观感受,有的通过获取获取底层数据的去评估,也有的像本文章 ...

  9. cocos2d-LUA逆向之修改客户端app,实时获取app解密后通信数据

    本文中,将以宝博.apk为例.基于前面 解密lua脚本与 解密lua资源,我们为实现修改客户端app,实时获取app解密后通信数据,应分析修改app端的lua脚本,然后按原app加密方式打包修改后的l ...

最新文章

  1. NLP玩得溜,「兵器」得趁手:GLUE排行第一的那种,了解下?
  2. 23 DesignPatterns学习笔记:C++语言实现 --- 2.2 Adapter
  3. 【微信网页版】给所有微信群发消息
  4. 【重复制造精讲】3、成本收集
  5. jQuery获取所有父级元素及同级元素及子元素的方法
  6. centos 新建swap区文件
  7. 返回JSON出现Infinite recursion无限循环错误的解决
  8. java命令行编译命令_Java使用命令行编译运行程序
  9. Android 安全 (一)
  10. R用户的福音︱TensorFlow:TensorFlow的R接口
  11. 5天学python_人生苦短,我将学习Python基本句子(第5天),我学,基础,篇,语句,Day5...
  12. mybatis的缓存基础
  13. 1.关于Python,你可能不知道的
  14. MAC下的环境变量设置
  15. html调用腾讯视频,调用腾讯视频播放器APi代码
  16. dbf解析_DBF文件格式分析.doc
  17. C#圆形卡尺测量程序基于halcon
  18. Prim算法的具体实现
  19. sizeof结构体指针
  20. 谷歌身份验证器验证码不对怎么回事_谷歌相机安装教程,让你的手机拥有谷歌般强大的夜拍能力...

热门文章

  1. js 简单实现 弹出确认 取消对话框
  2. 在NUC972上移植pjsip库并使用PJSUA测试VOIP电话(二)
  3. 二代身份证掉了,无需登报声明
  4. 可调电阻封装图_元器件PCB封装图鉴(附PCB元件库)
  5. 怎么处理系统蓝屏后提示代码0x000000d1的错误?
  6. 【Codecs系列】FFmpeg中mpeg2编解码器的提取和编译测试
  7. 【解决方案】监狱/看守所如何通过EasyCVR搭建智慧监管安防视频系统?
  8. 7-23 币值转换(转)
  9. 性能工具之locust工具get与post请求
  10. 什么是连通图,(强)连通图