[Titanium] 重復讀取遠端圖片

LINEで送る
[`evernote` not found]

一般的瀏覽器會把遠端的圖片存在暫存資料夾內以加快下一次的讀取
不過在Titanium中他卻好像不會主動做這件事
每建一個ImageView他都會依照指定的imageURL再去遠端抓一次圖片
可以用這種方法解決:

function justGet_remote_image(url, tmpPath, callback, height, width, defaultImage, timeout) {
	var imagePath = tmpPath + url;
	var imagefile = Ti.Filesystem.getFile(Titanium.Filesystem.applicationDataDirectory,url);    
 
	if (imagefile.exists()) {
		Ti.API.info(url + 'is exist!');
		callback(Titanium.Filesystem.applicationDataDirectory + Ti.Filesystem.separator + url);
	}else{
		defaultImage = defaultImage || '../images/tab_icon_main@2x.png';
		timeout = timeout || 30000;
		height = height || 64;
		width = width || 64;
 
		var xhr = Ti.Network.createHTTPClient();
		xhr.setTimeout(timeout);
 
		xhr.onerror = function(e) { 
			callback(defaultImage);
	 	};
 
		xhr.onload = function(){
			var f = Titanium.Filesystem.getFile(Titanium.Filesystem.applicationDataDirectory,url);
			if (Titanium.Platform.name == 'android') f.write(this.responseData);
			callback(Titanium.Filesystem.applicationDataDirectory + Ti.Filesystem.separator + url);
		};
		xhr.open('GET', imagePath);
		if (Titanium.Platform.name != 'android')
			xhr.file = Titanium.Filesystem.getFile(Titanium.Filesystem.applicationDataDirectory,url);
		xhr.send();
	}
}

然後在需要的地方呼叫:

justGet_remote_image(picURL, upLoadImgURL, function(remoteImage) {
	var imageView = Titanium.UI.createImageView({
		image: remoteImage,
		width:50,left:5
	});
	_Row.add(imageView);
}, 50, 50);

比較要注意的就是justGet_remote_image的timeout
如果讀取的imageView要放在其他的容器中(view)
就必須等到容器建好再放進去,否則會出錯….