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

时间:2014-10-22 15:46:06

标签: android appcelerator titanium-alloy

我正在使用 Titanium SDK 3.4.0 GA ,开发一款Android应用,可将远程图像从我的网络服务器加载到ImageView。

当设备在加载图像期间失去连接时出现问题,因此,我需要的是捕获该错误的方法(超时,404 ...)并设置" imageNotAvailable"。 我使用网络链接调节器进行 MacOSX 重现该场景,延迟时间短,数据包丢失......

为了证明这一点,我在test.js(Alloy Controller)中使用了以下代码,并使用带有id =' imageView'的ImageView的简单视图。在我的test.xml中。

有时会引发异常:

TiDownloadManager:(pool-4-thread-1)[45929,118581]异常下载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 :(得分:0)

您是否尝试在设置imageView的图像属性之前添加事件侦听器?

答案 1 :(得分: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您将收到一个可以附加到imageView.blob属性的blob响应,它会建议使用默认图像作为占位符,直到您获得成功响应。