Titanium未加载所有HTTPClient XML请求

时间:2011-03-23 08:43:11

标签: android titanium appcelerator

我有一个有5个窗口的应用程序,当点击上面的选项卡时,它们会向窗口传递要加载的RSS的URL。这令人抓狂,它将让我从Appcelerator跳到PhoneGap。

这是跳船前的最后努力..........请告诉我,我做的事情很傻。如果在模拟器上有点迟钝,它可以正常工作,但在我的戴尔Streak 5上,这是令人抓狂的不一致。有时XML渲染(它总是以4状态返回),有些东西只是随着活动指示器的旋转而挂起。如果我在没有活动指示器的情况下重建很多次,窗户中就没有任何内容。没有错误可以说我能看到。

HEre是违规代码。请告诉我,我正在做一些让我开心的事情。

data = [];

//load RSS Feed
Ti.API.info('>>>> loading RSS feed '+url);

//Show Loading Animation
navActInd.show();

var xhr = Ti.Network.createHTTPClient();
xhr.timeout = 10000;
xhr.open('GET', url);

xhr.onload  = function()
 {
     var xml1 = xhr.responseXML;
     var items = xml1.documentElement.getElementsByTagName("item");

//Loop Through XML and Build Rows
     for (var i = 0; i < items.length; i++) {
         this_post_title = items.item(i).getElementsByTagName("title").item(0).text;
         this_post_merchant = items.item(i).getElementsByTagName("category").item(0).text;
         post_cid = items.item(i).getElementsByTagName("source").item(0).text;
         var row = Ti.UI.createTableViewRow();
         var post_title = Ti.UI.createLabel({text: this_post_title});
         row.add(post_title);
         row.thisSource = post_cid;
         row.thisMerchant = this_post_merchant;
         data.push(row);
     }
     navActInd.hide();

     var tv = Titanium.UI.createTableView({
         data: data,
         top: 0,
         width: 'auto',
         height: 'auto'
 });

//Add Table to Window
 window.add(tv);
 navActInd.hide();

2 个答案:

答案 0 :(得分:0)

首先,你不应该两次隐藏navActInd。你还应该添加一个onerror函数来打印状态代码。

如果不查看您的xml文件,很难形成意见。

我理解你对钛的挫败感。关于它有很多令人沮丧的事情,因为构建这样一个框架非常复杂。我用钛制造了一个非常全面的应用程序,并且有很多这样的时刻,但是我发现解决所有问题的时间越少;)

答案 1 :(得分:0)

我看到类似的问题,当xml不是我所期望的时候,你应该在你的xmlparsing块周围放一个try catch块,看看是否抛出了错误

你应该为你的代码添加一个onError处理程序。

从复杂性的角度来看,您不需要标签来设置行的标题;这些行可以编辑

 var row = Ti.UI.createTableViewRow();
 var post_title = Ti.UI.createLabel({text: this_post_title});
 row.add(post_title);

使用此行,尽可能使用rowClassName

var row = Ti.UI.createTableViewRow({title: this_post_title, className:'@row'});
row.add(post_title);

我还建议你看一下厨房水槽演示的完整例子。 https://github.com/appcelerator/KitchenSink/tree/master/KitchenSink