Titanium не загружает все запросы HTTPClient XML - PullRequest
0 голосов
/ 23 марта 2011

У меня есть приложение, которое имеет 5 окон, и при нажатии на вкладки над ними пропускает окно URL RSS для загрузки. Это сводит с ума, и это собирается заставить меня перейти с Appcelerator на PhoneGap.

Это последний шаг перед прыжком с корабля .......... пожалуйста, скажи мне, что я делаю что-то глупое. Он работает нормально, если немного эмулировать на эмуляторе, но на моем Dell Streak 5 это безумно противоречиво. Иногда рендеринг XML (он всегда возвращается с 4 состояниями готовности), кое-что он просто зависает при вращении индикатора активности. Если я много раз перестраиваюсь без индикатора активности, то в окнах ничего не появляется. Нет ошибок, чтобы говорить об этом, я вижу.

Вот код ошибки. Пожалуйста, скажи мне, что я делаю что-то ужасно неправильное, чтобы сделать меня счастливым.

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 голосов
/ 23 марта 2011

Я видел подобные проблемы, когда xml не соответствует ожидаемому, вы должны поместить блок try catch вокруг вашего блока xmlparsing и посмотреть, если возникла ошибка

, вам нужно добавить обработчик onErrorcode.

с точки зрения сложности, вам не нужна метка для установки заголовка строки;эти строки могут быть отредактированы

 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);

Я бы также посоветовал вам взглянуть на демо Kitchen Sink для полного примера.https://github.com/appcelerator/KitchenSink/tree/master/KitchenSink

0 голосов
/ 23 марта 2011

Во-первых, вы не должны скрывать navActInd дважды. Вы также должны добавить функцию onerror для печати кода состояния.

Не взглянув на ваш XML-файл, сложно составить мнение.

Я понимаю ваше разочарование по поводу титана. Есть много вещей разочарования об этом, так как довольно сложно построить такую ​​структуру. я создал действительно комплексное приложение с титаном, и у меня было много таких моментов, но, тем не менее, я нашел решение для всех проблем;)

...