2012-01-10 3 views
0

내가 코로나 SDK와 루아 언어에 새로운 그리고 난 어떤 문제가 .. 코로나 SDK 루아 network.request 지연

그래서 내가 데이터를 내 사이트 및 JSON을 통해 네트워크 요청을 보내는이 기능을받을 수있다 . 이것은 잘 작동합니다.

문제는 리스너 함수 외부에서 데이터 응답을 사용하여 변수를 호출 할 때 nil 인 것 같습니다. 요청과 응답 사이의 문제로 인해 문제가 발생한 경우 추적 할 작은 타이머를 넣었습니다. 문제가 100 % 확실하지 않은 것 같습니다. 이 작업을 수행하는 데 사용자 지정 지연을 사용하고 싶지 않습니다.

리스너가 응답 할 때까지 스크립트를 일시 중지하고 실행을 계속할 수있는 방법이 있습니까? 나는 코 루틴으로 시도했지만 나는 그것을 해결할 수 ..

local data 

function networkListener(event) 
    if (event.isError) then 
     print("Network error!") 
    else 
    --print ("RESPONSE: " .. event.response) 

     data = json.decode(event.response) 

     print(data[1].start_date) --working great 

    end -- end of else statement 
end 


network.request("http://localhost/mysite/myphpmethod" , "GET", networkListener) 

print(data) -- error: attempt to index upvalue 'data' (a nil value) 

local function printIt() 
    print(data[1].start_date) 
end 

timer.performWithDelay(1000, printIt, 1); -- this works 

답변

1

는 HTTP 호출이 인쇄 (데이터) 거의 항상 비어있을 것조차 performWithDelay가 빈 될 수 있다는 사실을 의미하는 비동기 나쁜 날.

당신은 게임 코드는 networkListener에서 printIt을()()를 호출 할이 특별한 경우에 networkListener() (내에서 계속 같은 방식으로 응용 프로그램을 설계해야합니다.

이 어떤 생각을 다시 소요 -designing하지만 나쁘지 않습니다.

+0

예, 알겠습니다. 내 첫 번째 솔루션은 네트워크 수신기 내부에 있었지만 외부에있을 수 있다고 생각했습니다. 응답 해 주셔서 감사합니다 :) – troopy

0

서버에 요청을 보내는 동안 native.setActivityIndicator (true)를 호출하고 event.response에서 표시기 (native.setActivityIndicator (false))를 중지 할 수 있습니다. 서버에서 응답, 당신은 물건을 할 수 있습니다.

0

가장 쉬운 방법은 요청 및 팝업 새로운 버튼을 클릭하면 데이터로 수행해야하는 모든 작업을 수행하므로 많은 좋은 웹 사이트가이를 수행합니다. event.phase == "ended"를 사용할 수도 있지만 작동 원리가 확실하지 않습니다.