我正在使用 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);
}
请原谅我糟糕的英语!谢谢!
答案 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响应,它会建议使用默认图像作为占位符,直到您获得成功响应。