title: 数据操作
本篇文档介绍操作数据的方法。
操作数据包含以下四种方法:
方法 |
说明 |
wilddog_getValue() |
获取某个节点的数据。 |
wilddog_setValue() |
向某个节点写入数据。若此节点已存在数据,会覆盖这些数据。 |
wilddog_push() |
向某个节点添加子节点。子节点的 key 自动生成并保证唯一,value 是你要写入的数据。 |
wilddog_removeValue() |
删除指定的节点。 |
获取数据
wilddog_getValue()
方法用于获取某个节点的数据。
wilddog_getValue()
方法可设置回调方法来获取操作的结果。
例如,获取 room
节点数据:
C / RTOS / OpenWRT SDK
Arduino SDK
c
STATIC void onGetCallback(Wilddog_Node_T *p_snapshot, void* arg, Wilddog_Return_T err){
if(err < WILDDOG_HTTP_OK || err >= WILDDOG_HTTP_NOT_MODIFIED){
wilddog_debug("Get value error! Error code is %d", err);
return;
}
//打印获取到的节点数据
wilddog_debug_printnode(p_snapshot);
return;
}
int main(void){
Wilddog_T wilddog = 0;
//<SyncAppID>即你应用的 SyncAppID,"/room" 为节点的路径
wilddog = wilddog_initWithUrl("coaps://<SyncAppID>.wilddogio.com/room");
//注意,这里省略了对wilddog_getValue返回值的检查
wilddog_getValue(wilddog, p_head, onGetCallback, NULL);
while(1){
//和云端同步
wilddog_trySync();
}
wilddog_destroy(&wilddog);
return 0;
}
Arduino
void getValueCallBack(const char *pdata, int error, void* arg){
if(error >= 200 && error < 400){
Serial.print("\n get data success!\n");
}
Serial.print("\n get data : ");
Serial.print(pdata);
return;
}
Wilddog *ref = NULL;
void setup{
//<SyncAppID>即你应用的 SyncAppID,"/room" 为节点的路径
ref = new Wilddog("coaps://<SyncAppID>.wilddogio.com/room");
ref->getValue(getValueCallBack, NULL);
return;
}
void loop(){
//和云端同步
if(ref)
ref->trySync();
return;
}
写入数据
wilddog_setValue()
方法用于向某个节点写入数据。此方法会先清空指定节点,再写入数据。
wilddog_setValue()
方法可设置回调方法来获取操作的结果。
例如,修改 led
状态信息:
C / RTOS / OpenWRT SDK
Arduino SDK
c
STATIC void onSetCallback(void* arg, Wilddog_Return_T err){
if(err < WILDDOG_HTTP_OK || err >= WILDDOG_HTTP_NOT_MODIFIED){
wilddog_debug("Set value error! Error code is %d", err);
return;
}
wilddog_debug("Set value succeed!");
return;
}
int main(void){
Wilddog_T wilddog = 0;
Wilddog_Node_T *p_head= NULL,*p_node = NULL;
// 本地组装 led 节点,其值为 "on"
p_head = wilddog_node_createObject(NULL);
p_node = wilddog_node_createUString("led","on");
wilddog_node_addChild(p_head, p_node);
//<SyncAppID>即你应用的 SyncAppID,"/room" 为 led 节点的上级路径
wilddog = wilddog_initWithUrl("coaps://<SyncAppID>.wilddogio.com/room");
//注意,这里省略了对wilddog_setValue返回值的检查
wilddog_setValue(wilddog, p_head, onSetCallback, NULL);
//向云端设置完毕,删除本地组装的节点。
wilddog_node_delete(p_head);
while(1){
//和云端同步
wilddog_trySync();
}
wilddog_destroy(&wilddog);
return 0;
}
Arduino
void setValueCallBack(int error, void* arg){
if(error >= 200 && error < 400){
Serial.print("\n set data success!\n");
}
return;
}
Wilddog *ref = NULL;
void setup{
//<SyncAppID>即你应用的 SyncAppID,"/room" 为 led 节点的上级路径
ref = new Wilddog("coaps://<SyncAppID>.wilddogio.com/room");
ref->setValue("{\"led\":\"on\"}", setValueCallBack, NULL);
return;
}
void loop(){
//和云端同步
if(ref)
ref->trySync();
return;
}
追加子节点
wilddog_push()
方法用于向指定节点添加子节点。新增子节点的 key 由 Wilddog Sync 自动生成并保证唯一。 新增子节点的 key 基于时间戳和随机算法生成,并可以按照添加时间进行排序。
wilddog_push()
方法可设置回调方法来获取操作的结果。回调函数中第一个参数为新增节点的完整路径,新增子节点的 key 可以从中获取。
例如,追加子节点到 room
节点下:
C / RTOS / OpenWRT SDK
Arduino SDK
c
STATIC void onPushCallback(u8 *p_path,void* arg, Wilddog_Return_T err){
if(err < WILDDOG_HTTP_OK || err >= WILDDOG_HTTP_NOT_MODIFIED){
wilddog_debug("push failed, error code is %d", err);
return;
}
//获取新增数据对应的 path
wilddog_debug("new path is %s", p_path);
return;
}
int main(void){
Wilddog_T wilddog = 0;
Wilddog_Node_T * p_node = NULL, *p_head = NULL;
//建立一个object节点,即类似json中的{}
p_head = wilddog_node_createObject(NULL);
//建立一个key为 led,value为 "on" 的节点
p_node = wilddog_node_createUString("led","on");
//将节点p_node添加到object中
wilddog_node_addChild(p_head, p_node);
//<SyncAppID>即你应用的 SyncAppID,"/room" 为要追加节点的上级路径
wilddog = wilddog_initWithUrl("coaps://<SyncAppID>.wilddogio.com/room");
//注意,这里省略了对wilddog_push返回值的检查
wilddog_push(wilddog, p_head, onPushCallback, NULL);
//数据已经推送,删除本地组装的节点。
wilddog_node_delete(p_head);
while(1){
wilddog_trySync();
}
wilddog_destroy(&wilddog);
return 0;
}
Arduino
void pushValueCallBack(const char *pdata, int error, void* arg){
if(error >= 200 && error < 400){
Serial.print("\n set data success!\n");
}
//获取新增数据对应的 path
if(pdata){
Serial.print("\n get path : ");
Serial.print(pdata);
}
return;
}
Wilddog *ref = NULL;
void setup{
//<SyncAppID>即你应用的 SyncAppID,"/room" 为要追加节点的上级路径
ref = new Wilddog("coaps://<SyncAppID>.wilddogio.com/room");
ref->push("{\"led\":\"on\"}", pushValueCallBack, NULL);
return;
}
void loop(){
//和云端同步
if(ref)
ref->trySync();
return;
}
删除数据
wilddog_removeValue()
方法用于删除指定节点。
例如,删除 room
节点下所有的数据:
C / RTOS / OpenWRT SDK
Arduino SDK
c
STATIC void onDeleteCallback(void* arg, Wilddog_Return_T err){
if(err < WILDDOG_HTTP_OK || err >= WILDDOG_HTTP_NOT_MODIFIED){
wilddog_debug("Remove value error! Error code is %d", err);
return;
}
wilddog_debug("Remove value succeed!");
return;
}
int main(void){
//用户自定义参数,这里的用途为:初始化为FALSE,回调函数中设为TRUE
//因此可以在main函数中得知是否成功
BOOL isFinished = FALSE;
Wilddog_T wilddog;
//<SyncAppID> 为你自己的SyncAppID
wilddog = wilddog_initWithUrl("coaps://<SyncAppID>.wilddogio.com/room");
//注意,这里省略了对wilddog_removeValue返回值的检查
wilddog_removeValue(wilddog, onDeleteCallback, NULL);
while(1){
wilddog_trySync();
}
wilddog_destroy(&wilddog);
}
Arduino
void removeValueCallBack(const char *pdata, int error, void* arg){
if(error >= 200 && error < 400){
Serial.print("\n set data success!\n");
}
Serial.print("\n Remove value succeed!");
return;
}
Wilddog *ref = NULL;
void setup{
//<SyncAppID>即你应用的 SyncAppID,"/room" 为要删除节点的路径
ref = new Wilddog("coaps://<SyncAppID>.wilddogio.com/room");
ref->removeValue(removeValueCallBack, NULL);
return;
}
void loop(){
//和云端同步
if(ref)
ref->trySync();
return;
}