在android / ios安装的应用程序中显示运行时错误

时间:2017-09-21 00:24:41

标签: android actionscript-3 air

我一直在尝试在应用内的文本字段中显示错误,以便于用户报告错误。

我使用在stackoverflow上找到的代码取得了一些成功。它已在应用程序的顶层使用,但它无法在设备上运行:

//start code
this.loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, errorHandler);  

function globalErrorHandler(event:UncaughtErrorEvent):void  
{  
    var message:String;  
    //check for runtime error  
    if (event.error is Error)  
        message = (event.error as Error).getStackTrace();  
    //handle other errors  
    else if (event.error is ErrorEvent)  
        message = (event.error as ErrorEvent).text;  
    else  
        message = event.error.toString();  
    //do something with message (eg display it in textfield)  
    myTextfield.text = message;  
}  
//end code

首先,这不会对设备起作用,我认为这是因为在出现错误时,在PC上进行开发时,flashplayer会显示带有错误的actionscript弹出窗口。你需要点击"解雇所有"或者关闭然后调用globalErrorHandler然后将错误写入文本字段。我认为这是阻止它出现在设备上的原因。但是,通过添加event.preventDefault(),我可以在桌面上进行开发时抑制actionscript弹出窗口,并且错误已成功写入文本字段。然而,在andriod设备上并非如此。它仍然只是挂起错误。好像无法在Android上禁止默认错误事件。

感谢您的时间。任何帮助表示赞赏!

编辑22/09/2017:我终于能够在设备上看到错误。它与桌面发布时有关,将显示错误。然而,在设备上行为是不同的,有些东西覆盖了文本字段,通过将它带到前面,我能够看到错误。但是,我仍然看到类层次结构中的某些错误没有被捕获。

1 个答案:

答案 0 :(得分:1)

在我们的项目中,我们更简单(并且它正在运行):

stage.loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, onUncaughtError);

private function onUncaughtError(e:UncaughtErrorEvent):void
{
    // Console is basically a TextField for debug/diagnosis output.
    if (e.error) Console.error(e.error.getStackTrace());

    e.preventDefault();
}

您应该检查的另一件事是您的 TextField 是否实际显示任何文本 ,因为可能存在文本嵌入问题,与错误处理例程无关。 / p>

UPD :加载SWF,使其不与父级混合。

var request:URLRequest = new URLRequest(path);

var context:LoaderContext = new LoaderContext;
context.applicationDomain = ApplicationDomain.currentDomain;

var loader:Loader = new Loader;

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
loader.load(request, context);