どうも、hide92795です
またこのシリーズばっかですが・・・・大丈夫でしょう(;^ω^)
プログラムの方は、TLの他にリプ、DM、ふぁぼ欄を作成して、なんとか普通に使えるレベルまで達成しました☆-(ノ゚Д゚)八(゚Д゚ )ノイエーイ
んで、ここで問題が
TLとかリプ欄とか、ツイートを取得して表示させるところでは
1.指定された数のツイート取得(90個くらい)
↓
2.ツイートひとつひとつについて既に表示されていないかチェック
↓ (まだ表示されていなら)
3.データを整理(並び替え)
↓
4.表示
↓
5.2に戻る
を繰り返してやっているんですが、
このままだと、3の所でアイコンを取得する時間が発生してしまうんですね~
つまり
ツイートが一つずつ間隔をおいて追加されていく(伝わるかな?)ということです。
(自分が)使う分には問題ないんですが、2回目以降の更新の時、取得漏れしていたツイートが時々入ってきて
既読の下に新着のツイートが表示されちゃうっていうねw
ずっと↑キーをおしっぱですから、気づきにくいっていうのもあるんですねw
というわけで↑の方法を改造して
1.指定された数のツイート取得(90個くらい)
↓
2.ツイートひとつひとつについて既に表示されていないかチェック
↓ (まだ表示されていなら)
3.データを整理(並び替え)して別の変数にストック
↓
4.2に戻る
↓ (1で取得したツイートをすべて処理したら)
5.3でストックしていたものを一気に追加
これなら見た目は一気に表示されるはずなんですが、
なぜか同じツイートがたくさん表示される・・・orz
1で取得した一番最後の(古い)ツイートが90個ほどバーッと表示されるようになちゃったんですねw
なぜこうなるのかは現在調査中・・・
コードを追記の方に書いてみます
見たければ見てくださいwww
ではノシ
ーー2/8追記ーー
コード一部を直したらちゃんと動くようにになりましたww
ーーーーーーここから追記ーーーーーー
なんかコードの表示方法がわからないからこんな形にwww
Ctrl+A&コピーでメモ帳とかに貼りつけしてみてねw
ー2/8修正ー
ソースコード HTML化 コンバーター「唐辛子」
http://kujirahand.com/tools/tougarasi/
こちらのサイトのコンバーターを使ってみました
前のよりも見やすくなってますww
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
<span class="rem">/** * タイムラインの更新を確認するメソッドです。 */</span> <span class="keyword">private</span> <span class="keyword">void</span> CheckTL() { timeline_count++; System.out.println(<span class="str">"TL:"</span> + timeline_count); <span class="keyword">if</span>(timeline_count == timeline_update | timeline_f5_update){ ArrayList<Object[]> add_statuses = <span class="keyword">new</span> ArrayList<Object[]>(); update_showlabel(<span class="str">"TL"</span>, true); timeline_f5_update = false; timeline_count = <span class="num">0</span>; Date RTdate = null; Object status_[] = <span class="keyword">new</span> Object[<span class="num">11</span>]; Paging paging = <span class="keyword">new</span> Paging(<span class="num">1</span>, get_TL); System.out.println(<span class="str">"call"</span>); <span class="keyword">try</span> { ResponseList<Status> statuses = twitter.getHomeTimeline(paging); <span class="keyword">if</span>(statuses != null){ <span class="keyword">for</span>(Status status :statuses){ <span class="keyword">boolean</span> isRetweet = false; String RTuser = <span class="str">"none"</span>; <span class="keyword">if</span>(status.isRetweet()){ System.out.println(<span class="str">"Retweet"</span>); isRetweet = true; RTuser = status.getUser().getScreenName(); RTdate = status.getCreatedAt(); status = status.getRetweetedStatus(); } <span class="keyword">if</span>(!TL_status_id_list.containsKey(status.getId())){ TL_status_id_list.put(status.getId(), null); String tweet_from_ = status.getSource(); String tweet_from_name; String tweet_from_URL; String tweet_user_icon = status.getUser().getProfileImageURL().toString(); Matcher m = fromURL_name_pattern.matcher(tweet_from_); Matcher m1 = fromURL_URL_pattern.matcher(tweet_from_); <span class="keyword">if</span> (m.find() & m1.find()){ tweet_from_name = m.group(<span class="num">1</span>); tweet_from_URL = m1.group(); }<span class="keyword">else</span>{ tweet_from_name = <span class="str">"Web"</span>; tweet_from_URL = <span class="str">"http://twitter.com/"</span>; } ImageIcon imageIcon = ImageIconManager.getImageIcon(status); status_[<span class="num">0</span>] = <span class="str">""</span>; status_[<span class="num">1</span>] = <span class="str">"★"</span>; status_[<span class="num">2</span>] = imageIcon; status_[<span class="num">3</span>] = status.getUser().getName(); status_[<span class="num">4</span>] = status.getText(); status_[<span class="num">5</span>] = sdf.format(status.getCreatedAt()); status_[<span class="num">6</span>] = status.getUser().getScreenName(); status_[<span class="num">7</span>] = tweet_from_name; status_[<span class="num">8</span>] = status.getId(); status_[<span class="num">9</span>] = tweet_user_icon; status_[<span class="num">10</span>] = tweet_from_URL; <span class="keyword">if</span>(isRetweet){ status_[<span class="num">5</span>] = sdf.format(RTdate); status_[<span class="num">6</span>] = status_[<span class="num">6</span>] + <span class="str">" (RT:"</span> + RTuser + <span class="str">")"</span>; } System.out.println(status_[<span class="num">3</span>] + <span class="str">" : "</span> + status_[<span class="num">4</span>]); add_statuses.add(status_); } } } } <span class="keyword">catch</span> (TwitterException e) { e.printStackTrace(); } <span class="keyword">for</span>(Object[] status : add_statuses){ timeline_tableModel.addRow(status); } update_showlabel(<span class="str">"TL"</span>, false); } } |
timeline_count・・・一秒毎にこのメソッドを呼び出しているので、最後に呼び出されてから何秒経ったか
timeline_update・・・タイムラインの更新間隔(秒)
timeline_f5_update・・・F5とかで強制的に更新させるときにtrue
add_statuses・・・ストックしとくためのList
update_showlabel()・・・画面右下に「更新中:TL」と表示させるためのメソッド
status_[]・・・ツイートを整理するための配列
statuses・・・取得したツイート
status・・・statusesから一つ一つ取り出した物
ImageIconManager・・・アイコン管理用のクラス
めんどいからこれくらいでいい?(´・ω・`)
ではノシ
(なんか「こうしたらいいんじゃない?」ってところがあったらコメントしてね~w)
ー2/8追記ー
1 |
Object status_[] = <span class="keyword">new</span> Object[<span class="num">11</span>]; |
の位置を
1 |
<span class="keyword">for</span>(Status status :statuses){ |
の下に移したら、ちゃんと動くようになりましたww