2012-01-10 20 views
0

私はコロナSDKとLuaの言語に新たなんだと私はいくつかのトラブルを持っている...コロナSDKのLua network.request遅延

ので、私は自分のサイトへのネットワーク要求を送信し、JSONを通じて、私はデータを受信し、この機能を持っています。これは素晴らしいです。

問題は、リスナー関数の外部のデータ応答で変数を呼び出すと、nilと思われることです。リクエストとレスポンスの時間が原因で問題が発生したかどうかを調べるために小さなタイマーを設定し、それがそのように見えます(ただし、100%はわかりません)。私はカスタム遅延を使用してこの操作を実行したくありません。

リスナーの応答までスクリプトを一時停止してから実行を続ける方法はありますか? HTTP呼び出しは、あなたの印刷(データ)は、ほとんど常に空になることを実際に意味し、非同期であってもperformWithDelayが上空である可能性があります。..

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

を私はコルーチンを試してみましたが、私はそれを解決することができませんでした付いてない日。

あなたがゲームコードを使用すると、networkListenerからはprintitを()()を呼び出します。この特定のケースではnetworkListener()(内続けるような方法で、あなたのアプリケーションを設計する必要があります。

これは、いくつかの思考と再取り-designingでもそれほど悪くはありません。

+0

よろしくお願いいたします。私の最初の解決策はネットワークリスナーの中でしたが、外でも可能だと思いました。 応答ありがとう:) – troopy

0

サーバーに要求を送信中にnative.setActivityIndi​​cator(true)を呼び出し、event.responseでインジケータ(native.setActivityIndi​​cator(false))を停止することもできます。サーバーからの応答は、あなたのものを行うことができます。

0

最も簡単な方法は、あなたがデータで何をする必要があっても新しいボタンを押し上げると、多くの良いウェブサイトがそれを行います。 event.phase == "ended"を使用することもできますが、どれくらいうまく動作するかはわかりません。