测试程序下载:http://pan.baidu.com/s/1dERKj2D APP数据来源大致分三种: 1、线上数据 服务器端返回的数据,一般采用用HTTP或者HTTPS、SOCKET连接方式与A
测试程序下载:http://pan.baidu.com/s/1dERKj2D
APP数据来源大致分三种:
1、线上数据
服务器端返回的数据,一般采用用HTTP或者HTTPS、SOCKET连接方式与APP客户交互,可以返回json格式或者二进制。
local json = luaopen_cjson();function HelperURLResponeFunc(urlresponse) local urlrequest = urlresponse:getRequest(); if(urlrequest.thread ~= nil) then --LXZMessageBox("urlrequest.thread:"..type(urlrequest.thread)); coroutine.resume(urlrequest.thread, urlresponse); end endlocal service_host = "http://120.55.84.103:8080/";--服务器地址local function HelperPostGetJSON(url, data, fn) local co = coroutine.create(function (thread) local urlrequest = _urlRequest:new(); urlrequest.nRequestType = eRequestPost; urlrequest.func = "HelperURLResponeFunc"; urlrequest.url = url.."?"; for k,v in pairs(data) do urlrequest.url = urlrequest.url ..k.."="..v.."&"; end urlrequest.url = TrimRightChar(urlrequest.url, '&'); urlrequest.url = TrimRightChar(urlrequest.url, '?'); urlrequest.thread = thread; --LXZMessageBox(urlrequest.url); local curl = CLXZCurl:Instance(); curl:send(urlrequest); local urlresponse = coroutine.yield(); if(fn~=nil) then fn(urlresponse); end end); coroutine.resume(co, co); end--从服务器获取数据local function OnServer(window, msg, sender) local root=HelperGetRoot();--获得根节点 local wnd=root:GetLXZWindow("id");--获得id窗口 --创建协程,在协程里可以顺序执行异步代码 HelperCoroutine(function(thread) HelperPostGetJSON(service_host.."getid", {}, function(urlresponse)--异步调用接口 LXZMessageBox("urlresponse:getResponseData:"..urlresponse:getResponseData()) local res = json.decode(urlresponse:getResponseData()); if res then HelperSetWindowText(wnd, res.id); else HelperSetWindowText(wnd, "从服务器获取失败"); end coroutine.resume(thread); end); coroutine.yield(); end);end
2、本地配置数据
可读取key-value模式文本数据文件
--从配置文件读取数据local function OnCfg(window, msg, sender) local root=HelperGetRoot();--获得根节点 local wnd=root:GetLXZWindow("id");--获得id窗口 local cfg = ILXZCoreCfg:new_local(); cfg:load(LXZAPIGetWritePath().."data.cfg"); local id = cfg:GetInt("id"); if id then HelperSetWindowText(wnd, id); else HelperSetWindowText(wnd, "配置文件错误"); end end
3、sqlite3数据库
集成有sqlite数据库,可直接跟sqlite交互。
--数据库相关local function DBInitialize(dbname) LXZDoFile("sqlite3.lua"); --数据库模块 local corecfg = ICGuiGetLXZCoreCfg(); local dbfullpath = ""; if(corecfg.IsEditTool==true) then --如果是lae工具中. dbfullpath = LXZAPIGetWritePath().."Edit"..dbname; --防止产生数据库同名时无法同时打开。 else dbfullpath = LXZAPIGetWritePath()..dbname; end --打开sqlite3 local db = sqlite3.open(dbfullpath); db:exec("drop table Test"); --删除存在的表 sql = "create table Test(id INTEGER PRIMARY KEY autoincrement, name VARCHAR(32), userid INTERGER)"; local d,err = db:exec(sql); --创建Test表,id作为主键,自动增加,name名字可变长. sql = "insert into Test(id,name,userid) values(100, /"我是个测试名字!/", 1111111)" --插入测试数据. local d,err = db:exec(sql); return db;end--文件加载时初始化.local db=DBInitialize("TestData.db"); --从数据库读取数据local function OnSqlite(window, msg, sender) local root=HelperGetRoot();--获得根节点 local wnd=root:GetLXZWindow("id");--获得id窗口 local sql="select * from Test where id=100"; local d,err = db:exec(sql); local users = HelperDBSelect(db, sql, true); if users and users[1] then HelperSetWindowText(wnd, users[1].userid); else HelperSetWindowText(wnd, "该数据不存在."); end end
1、测试程序界面
测试代码:
LXZDoFile("LXZHelper.lua");LXZDoFile("serial.lua");local json = luaopen_cjson();function HelperURLResponeFunc(urlresponse) local urlrequest = urlresponse:getRequest(); if(urlrequest.thread ~= nil) then --LXZMessageBox("urlrequest.thread:"..type(urlrequest.thread)); coroutine.resume(urlrequest.thread, urlresponse); end endlocal service_host = "http://120.55.84.103:8080/";--服务器地址local function HelperPostGetJSON(url, data, fn) local co = coroutine.create(function (thread) local urlrequest = _urlRequest:new(); urlrequest.nRequestType = eRequestPost; urlrequest.func = "HelperURLResponeFunc"; urlrequest.url = url.."?"; for k,v in pairs(data) do urlrequest.url = urlrequest.url ..k.."="..v.."&"; end urlrequest.url = TrimRightChar(urlrequest.url, '&'); urlrequest.url = TrimRightChar(urlrequest.url, '?'); urlrequest.thread = thread; --LXZMessageBox(urlrequest.url); local curl = CLXZCurl:Instance(); curl:send(urlrequest); local urlresponse = coroutine.yield(); if(fn~=nil) then fn(urlresponse); end end); coroutine.resume(co, co); end--从服务器获取数据local function OnServer(window, msg, sender) local root=HelperGetRoot();--获得根节点 local wnd=root:GetLXZWindow("id");--获得id窗口 --创建协程,在协程里可以顺序执行异步代码 HelperCoroutine(function(thread) HelperPostGetJSON(service_host.."getid", {}, function(urlresponse)--异步调用接口 LXZMessageBox("urlresponse:getResponseData:"..urlresponse:getResponseData()) local res = json.decode(urlresponse:getResponseData()); if res then HelperSetWindowText(wnd, res.id); else HelperSetWindowText(wnd, "从服务器获取失败"); end coroutine.resume(thread); end); coroutine.yield(); end);end--数据库相关local function DBInitialize(dbname) LXZDoFile("sqlite3.lua"); --数据库模块 local corecfg = ICGuiGetLXZCoreCfg(); local dbfullpath = ""; if(corecfg.IsEditTool==true) then --如果是lae工具中. dbfullpath = LXZAPIGetWritePath().."Edit"..dbname; --防止产生数据库同名时无法同时打开。 else dbfullpath = LXZAPIGetWritePath()..dbname; end --打开sqlite3 local db = sqlite3.open(dbfullpath); db:exec("drop table Test"); --删除存在的表 sql = "create table Test(id INTEGER PRIMARY KEY autoincrement, name VARCHAR(32), userid INTERGER)"; local d,err = db:exec(sql); --创建Test表,id作为主键,自动增加,name名字可变长. sql = "insert into Test(id,name,userid) values(100, /"我是个测试名字!/", 1111111)" --插入测试数据. local d,err = db:exec(sql); return db;end--文件加载时初始化.local db=DBInitialize("TestData.db"); --从数据库读取数据local function OnSqlite(window, msg, sender) local root=HelperGetRoot();--获得根节点 local wnd=root:GetLXZWindow("id");--获得id窗口 local sql="select * from Test where id=100"; local d,err = db:exec(sql); local users = HelperDBSelect(db, sql, true); if users and users[1] then HelperSetWindowText(wnd, users[1].userid); else HelperSetWindowText(wnd, "该数据不存在."); end end--从配置文件读取数据local function OnCfg(window, msg, sender) local root=HelperGetRoot();--获得根节点 local wnd=root:GetLXZWindow("id");--获得id窗口 local cfg = ILXZCoreCfg:new_local(); cfg:load(LXZAPIGetWritePath().."data.cfg"); local id = cfg:GetInt("id"); if id then HelperSetWindowText(wnd, id); else HelperSetWindowText(wnd, "配置文件错误"); end end--事件绑定local event_callback = {}event_callback.__index = event_callback;event_callback ["OnServer"] = OnServer;event_callback ["OnSqlite"] = OnSqlite;event_callback ["OnCfg"] = OnCfg;--消息派发接口function main_dispacher(window, cmd, msg, sender) LXZAPI_OutputDebugStr("cmd 1:"..cmd); if(event_callback[cmd] ~= nil) then --如果已经绑定 LXZAPI_OutputDebugStr("cmd 2:"..cmd); event_callback[cmd](window, msg, sender);--则调用绑定的接口 endend