Titanium MobileでRSSを読むアプリサンプルを書きなおしてみた
スポンサードリンク
昨日書いたTitanium Mobileで生成できるRSS表示するアプリサンプルを、オブジェクトにまとめて書きなおしてみました。
でも、Titanium Mobileで想定している分割とは違うみたいです。そろそろ、サンプルアプリのKitchenSinkを参考にする時かな……
// feed を取得して、TableViewに表示する
var FeedReader = function(feedUrl) {
this.feedItems = []; // 画面表示されている全てのfeedアイテム
this.feedUrl = feedUrl; // 読み込むfeedのURL
this.offset = 1; // YQLで読み込むfeedの位置
this.limit = 3; // YQLで一度に読み込むfeedの数
this.tableView = Titanium.UI.createTableView({ data: [] });
this.win = Titanium.UI.createWindow({ title: 'news', });
this.win.add( this.tableView );
this.tab = Titanium.UI.createTab({
window: this.win,
icon: 'KS_nav_ui.png',
title: '最新情報',
});
this.setEvent();
this.feedGet();
};
FeedReader.prototype = {
getTab: function() {
return this.tab;
},
feedGet : function() {
var self = this;
// RSS を取得して、TableViewに表示する
var query = 'SELECT * FROM rss WHERE url="'
+ this.feedUrl + '" limit '
+ this.limit + ' offset '
+ this.offset;
// alert(query);
Titanium.Yahoo.yql(query, function ( e ) {
if ( self.feedItems.length > 0 ) {
// tableView1の最後の項目を消す
self.tableView.deleteRow( self.tableView.data[0].rowCount - 1 );
}
if ( !( e.data ) ) {
// YQLのレスポンスが失敗の時
alert( 'YQLのレスポンスエラー。エラーメッセージ:' + e.message );
}
else {
// YQLのレスポンスが成功の時
var rssitems = e.data.item;
rssitems.forEach ( function( item ){
self.feedItems.push( item );
self._appendRow( item );
self.offset++;
});
self._appendRowReadNext();
}
});
},
// feed項目をtableViewに追加する
_appendRow: function( item ) {
var row = Titanium.UI.createTableViewRow();
row.className = 'entry';
row.height = 'auto';
row.layout = 'vertical';
row.add(Titanium.UI.createLabel({
text: item.title,
top: '4dp',
left: '4dp',
right: '4dp',
height: 'auto',
color: 'white',
font: { fontWeight: 'bold',
fontSize: '15dp',
},
}));
row.add(Titanium.UI.createLabel({
text: item.description.slice( 0, 50 ) + '……',
top: '0dp',
left: '4dp',
right: '4dp',
height: 'auto',
font: { fontSize: '13dp', },
}));
row.add(Titanium.UI.createLabel({
text: item.date.replace( 'T', ' ' )
.replace( '+09:00', '' ),
left: '4dp',
height: 'auto',
}));
this.tableView.appendRow( row );
return;
},
// 「続きを読む」項目をtableViewに追加する
_appendRowReadNext: function () {
var row = Titanium.UI.createTableViewRow();
row.className = 'entry';
row.height = 'auto';
row.layout = 'vertical';
row.add(Titanium.UI.createLabel({
text: '続きを読む',
textAlign: 'center',
top: '4dp',
left: '4dp',
right: '4dp',
height: '42dp',
color: 'white',
font: { fontWeight: 'bold',
fontSize: '15dp',
},
}));
this.tableView.appendRow( row );
return;
},
// TableView1内がタップされたときの動作を定義する
setEvent: function() {
var self = this;
this.tableView.addEventListener(
'click',
function( e ) {
if (e.index < ( self.tableView.data[0].rowCount - 1) ) {
var entryWindow;
var entryView;
// 新しくWindowを作ってWebViewを表示します
entryWindow = Titanium.UI.createWindow({
title: self.feedItems[ e.index ].title
});
entryView = Titanium.UI.createWebView({
url: self.feedItems[ e.index ].link
});
entryWindow.add( entryView );
// 現在のTabでWebViewのWindowを表示
self.tab.open( entryWindow );
}
else {
self.feedGet();
}
}
);
return;
},
};
var feedReader = new FeedReader('http://feeds.feedburner.com/MCPC');
// TabGroupを作る
var tabGroup = Titanium.UI.createTabGroup();
// tabGroupにtabを追加
tabGroup.addTab( feedReader.getTab() );
// TabGroupを表示
tabGroup.open();
スポンサードリンク
トラックバック(0)
トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/3826





![: Amazon.co.jp: プラスティック・メモリーズ 1【完全生産限定版】(イベントチケット優先販売申込券付) [Blu-ray]](/lists/_9/B00VWX66E8.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 2【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX66K2.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 3【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX6MV0.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 4【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX66IO.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 5【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX6Y0E.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 6【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX69D6.jpg)


こんにちは
TitaniumでRSSリーダーを開発しているものです。
上記コードをそのままapp.jsに書いてビルドしてみたところ、iPhoneでしたら問題なかったのですが、androidの実機にビルドしようとすると
"YQLのレスポンスエラー。エラーメッセージ:undefined"と出てしまいます。
YQLでRSSを読み込むコードをいろんなサイトから引っ張って来て試しましたが、Androidだとどうもうまく動きません。
・プロジェクトのクリーンを行っても変わらずでした。
・AndroidはXPERIA(SO-02C)、Android2.3.4です。
・Androidエミュレーターでは問題なく動いております。
何かヒントなどありますでしょうか。
よろしくお願いします。
COさん:
当方でも以前のエントリ
http://blog.dtpwiki.jp/dtp/2012/01/yqltitanium-mob.html
にて書いている通り、Androidエミュレータ上で同様の
エラーメッセージが表示されることが何回かありました。
その場合、Androidエミュレータを立ち上げなおすことで問題が回
復していました。
YQLは汎用のAPIですが、Titaniumに実装されているYQL取り
扱いオブジェクトの挙動があまり信用できないような印象があり
ます。
汎用のRSSリーダを作るのであれば、上記以前のエントリでも書い
てあるとおり、YQLに頼らず自前でRSSのパースエンジンを用意し
たほうがいいのかもしれません。