автоматическое обновление SWF-фильма с использованием сценария действий 3 - PullRequest
0 голосов
/ 24 ноября 2018

Я создаю табло во флеше, получаю данные с конечных точек REST.Я могу читать данные один раз должным образом, после того, как те же самые данные повторяются, не может читать данные обновления.Я пробовал с таймером, может ли кто-нибудь помочь мне здесь

Заранее спасибо

мой код ниже

import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.events.Event;
    import flash.text.TextField;
    import flash.display.Graphics;

    var white: Array = new Array();
    var black: Array = new Array();
    var red;
    var striker;

    var myTimer:Timer = new Timer(4000,100);
    myTimer.addEventListener(TimerEvent.TIMER, timerListener);
    function timerListener (e:TimerEvent):void{
    trace("Timer is Triggered");
        var urlLoader: URLLoader=null;

    // load the JSON data from the URL
    urlLoader = new URLLoader(new URLRequest("xxxxxxxxxxx"));
    urlLoader.addEventListener(Event.COMPLETE, loadData);

    // handle the load completion
    function loadData(e: Event):void {
        trace(e.target.data);

    }
    myTimer.start();
    stop();

1 Ответ

0 голосов
/ 24 ноября 2018

Хотя я не уверен, что именно не так с вашим кодом, есть вещи, которые я бы не использовал в проекте:

  1. Выдача HTTP-запросов на один и тот же URL-адрес несколько раз по времени,а не ожидание завершения каждого запроса перед отправкой другого.
  2. Loader или URLLoader экземпляры, хранящиеся в переменных локальной функции.Обычно локальные переменные функции существуют только до тех пор, пока функция выполняется, и их содержимое (если оно каким-то образом не удерживается областью приложения) может быть уничтожено сборщиком мусора буквально в ЛЮБОЙ момент без учета ваших намерений. UPD: Был вход, что GC не будет уничтожать URLLoader , пока у него есть незаконченный запрос на обработку, тем не менее, иметь неразрушимые экземпляры, висящие где-то, куда вы не можете добраться до них, не очень хорошая идеялибо.
  3. Функции, определенные в других функциях.

С учетом всего вышесказанного должно работать нормально:

// Keep URLLoader instance within the scope.
var L:URLLoader;

// Issue the first request.
loadNext();

// This function issues the new request.
function loadNext():void
{
    var aReq:URLRequest = new URLRequest("xxxxxxx");

    L = new URLLoader(aReq);
    L.addEventListener(Event.COMPLETE, onData);

    // Error handling - a must have.
    L.addEventListener(IOErrorEvent.IO_ERROR, onError, false, 0, true);
    L.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onError, false, 0, true);

    L.load();
}

// This function handles normal data processing.
function onData(e:Event):void
{
    // Sanity check. If event is triggered by anything
    // but the current URLLoader instance - do nothing.
    if (e.target != L) return;

    // Your data processing here.
    trace(L.data);

    // Clean-up the current request and schedule the next one.
    resetRequest();
    waitNext();
}

// This function handles all error events.
function onError(e:Event):void
{
    // Sanity check. If event is triggered by anyhting
    // but the current URLLoader instance - do nothing.
    if (e.target != L) return;

    // Report the error.
    trace("Oh, no:", e);

    // Clean-up the current request and schedule the next one.
    resetRequest();
    waitNext();
}

// This function destroys the current request.
function resetRequest():void
{
    // Sanity check. If there's no URLLoader instance - do nothing.
    if (!L) return;

    L.removeEventListener(Event.COMPLETE, onData);
    L = null;
}

// This function calls "loadNext" in 4 seconds.
function waitNext():void
{
    // Although the use of setTimeout counts as outdated,
    // it will still for our needs here.
    setTimeout(loadNext, 4000);
}
...