在Titanium ImageView中捕获加载远程图片的错误

3
我正在使用Titanium SDK 3.4.0 GA,开发一款Android应用程序,从我的Web服务器加载远程图像到一个ImageView中。
问题出现在当设备在加载这些图片时失去连接时,因此,我需要一种方法来捕获错误(超时,404...)并设置“imageNotAvailable”的状态。 我正在使用MacOSX的Network Link Conditioner来复制这种情况,包括低延迟、丢包等。
为了证明这一点,我在我的test.js(Alloy控制器)中使用以下代码,并在我的test.xml中使用一个带有id = 'imageView'的ImageView的简单视图。
有时,会抛出一个异常:
TiDownloadManager:(pool-4-thread-1) [45929,118581] Exception downloading http://...
但不总是这样(远程连接超时似乎是无限的),无论是否出现此异常,我都无法捕获它(可能是由于异步请求),也无法触发ERROR事件。
function imageNotAvailable(e)
{       
    Ti.API.info('Error loading image:'+JSON.stringify(e));
    $.imageView.image = "/imageNotAvailable.png";
}

function onLoad(e)
{
    Ti.API.info('Image Loaded:'+JSON.stringify(e));
}

function setImageAndroid(image)
{
    try{
        $.imageView.image = 'http://....';
    }catch(e){
        $.imageView.fireEvent("error");
    }

    $.imageView.addEventListener("error", imageNotAvailable);
    $.imageView.addEventListener("load", onLoad);

}

抱歉我的英语不好!谢谢!

2个回答

0
我可以建议一种避免使用HTTP请求的方法。
在某个库类中创建一个函数,该函数接受您需要访问的URL。
Connection.getImage = function(link){
var xhr = Titanium.Network.createHTTPClient({
            onload : function(e) {
                var responseResult = this.responseText;
                callback(responseResult);
            },
            // function called when an error occurs, including a timeout
            onerror : function(e) {
                callback("fail");
                // Ti.API.info('IN ERROR ' + e.error);
            },
         timeout : 5000
        });

    xhr.open("GET", link);
xhr.send();
};

// PS:您将收到一个 blob 响应,您可以将其附加到 imageView.blob 属性上,它会建议使用默认图像作为占位符,直到您获得成功响应。

0
你尝试在设置imageView的图像属性之前添加事件监听器了吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接