在Corona SDK中更新网络请求

时间:2014-01-23 22:23:13

标签: networking sdk lua request corona

我从一个带有network.request-function的网站获取一些json的东西(比特币的价值)。但是,我希望每次用户按下更新时,json的东西(比特币的值)都会更新到最新版本。怎么可能?

local json = require("json")
btcPriceText = display.newText("price", 50,100, "Arial", 25)

local function btcValue(event)
btcValue = json.decode(event.response)
dollarbtc= btcValue[1]['rate']
end

local function update()
if(dollarbtc) then
    btcPriceText.text = "BTC"..dollarbtc
end
end


network.request( "https://bitpay.com/api/rates", "GET", btcValue )
Runtime:addEventListener( "enterFrame", update )

这是我正在使用的所有代码。

1 个答案:

答案 0 :(得分:0)

参考优秀的Corona docs on buttons页面,您可以将network.request放在该页面上第一个示例的handleButtonEvent中。这样,每次用户单击按钮时,都会发出新请求。响应一到,就会调用btcValue函数,从而根据响应内容设置dollarbtc值。目前,您的update回调会在每个时间帧检查响应数据是否可用。所以至少,你应该在更新文本小部件后取消设置dollarbtc(将其设置为nil),否则你将在每个时间框架更新小部件!

local function update()
    if (dollarbtc) then
        btcPriceText.text = "BTC"..dollarbtc
        dollarbtc = nil -- do come here again, text field updated!
    end
end

但是,您甚至不需要这样做:在处理回复时更新文本字段:

local function btcValue(event)
    local btcValue = json.decode(event.response)
    local dollarbtc= btcValue[1]['rate']
    btcPriceText.text = "BTC"..dollarbtc
end

您可以忘记Runtime:addEventListener( "enterFrame", update )行,不再需要。

请勿忘记添加display.yourButton:addEventListener( "tap", handleButtonEvent)按钮responds to clicks。点击事件没有阶段(而触摸事件确实存在)。