一个适用于Android,方便从OneNET平台获取数据的工具。
本工具实现的功能:
- 一个简易的框架,只需设置设备id、数据流id,就能通过http协议从OneNET平台上同步获取相关的数据。
- 一个用于显示历史数据点列表的ListView,自动异步加载数据,并支持上拉加载下一页。
- 添加依赖
方法一:下载本项目源码,导入module。
方法二:从jitpack上下载依赖:
在项目build.gradle中添加:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
在module的build.gradle中添加依赖(项目依赖了retrofit2框架,需要一同导入):
dependencies {
implementation 'com.github.Hydri0n:OneNETHelper:0.2'
implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
}
-
使用框架同步获取数据
实例化一个Device类,设置设备的相关信息:Device device = new Device("设备的id", "设备的api-key");
得到一个Device实例后,调用它的相应方法同步获取你需要的数据:- 获取设备的名称:
device.getDeviceTitle()
- 查询设备是否在线,返回一个布尔值:
device.isOnline()
- 获取数据流的一个最新的数据,返回一个DeviceDataPoint的实例:
device.getCurrentDataPoint("数据流id")
你可以通过DeviceDataPoint的getValue()方法和getTime()方法来得到该数据点的值与更新时间。 - 获取数据流在两个时间区间内的所有数据点:
device.getDataPointsWithinLimit(数据流id,开始时间,结束时间)
- 你也可以通过*getDataPoints()*方法,设置任意的参数组合来获取需要的数据。该方法的具体参数及含义如下:
limit 返回的数据点个数上限, startTime 提取数据点的开始时间, endTime 提取数据点的结束时间, duration 查询时间区间,单位为s, cursor 指定本次请求继续从cursor位置开始提取数据, sort 升序(ASC)/倒序(DESC)
使用示例:
//获取并遍历两个时间点间所有的数据点 Device device = new Device("设备id","设备apikey"); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date2 = format.parse("2018-05-12 21:41:02"); Date date1 = format.parse("2018-05-13 21:40:48"); List<DeviceDataPoint> dataPoints = device.getDataPointsBetweenTwoTimes( "temp",date1,date2); for (DeviceDataPoint p:dataPoints) { System.out.println(p.getValue() + " " +p.getTime()); }
*另外需要注意的是,以上方法都是同步加载数据,所以不能在安卓应用的主线程中运行。
- 获取设备的名称:
-
创建一个显示数据流历史数据的列表组件
该ListView组件用于倒序显示一个数据流的所有历史数据,上拉至底部时加载更多数据。
使用时,直接在activity的布局文件中添加一个DataPointsListView:
<xyz.hydrion.onenethelper.DataPointsListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent">
在获取该组件的实例后,调用
setDataStream(String devId,String apiKey,String dataStreamId)
方法,组件即会自动设置adapter并异步加载数据。
此后你也可以通过调用changeDataStream()方法来更改列表加载的数据流。