プロが教える店舗&オフィスのセキュリティ対策術

お世話になっております。

xmlパーサについておききしたいことがございます。
現在、twitterリーダーアプリを製作中なのですが、
全ての行を読み込むと動作が重いので、
読み込む行の数を10行と指定したいのですが、
いい方法はありますでしょうか。

自分で試してみたところ、
表示させる行の数を指定することには成功したのですが、
いまいち、読込み速度の減少が実感できません。

お力をお貸し頂ければ幸いです。
よろしくお願いします。


// タグの識別子
private static final String PROFILE_IMAGE_URL = "profile_image_url";

public ArrayList<TwitterStatus> parse() {
ArrayList<TwitterStatus> list = null;
XmlPullParser parser = Xml.newPullParser();
try {
byte[] data = HttpClient.getByteArrayFromURL(urlStr);
parser.setInput(new StringReader(new String(data, "UTF-8")));
int eventType = parser.getEventType();
TwitterStatus currentStatus = null;
boolean isFinished = false;
while (eventType != XmlPullParser.END_DOCUMENT && !isFinished) {
String name = null;
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
list = new ArrayList<TwitterStatus>();
break;
case XmlPullParser.START_TAG:
name = parser.getName();
if (name.equalsIgnoreCase(STATUS)) {
currentStatus = new TwitterStatus();
} else if (currentStatus != null) {
if (name.equalsIgnoreCase(TEXT)) {
currentStatus.setText(parser.nextText());
} else if (name.equalsIgnoreCase(SCREEN_NAME)) {
currentStatus.setScreenName(parser.nextText());
} else if (name.equalsIgnoreCase(PROFILE_IMAGE_URL)) {
// アイコンURLを取得
currentStatus.setProfileImageUrl(parser.nextText());
}
}
break;
case XmlPullParser.END_TAG:
name = parser.getName();
if (name.equalsIgnoreCase(STATUS) && currentStatus != null) {
list.add(currentStatus);
} else if (name.equalsIgnoreCase(STATUSES)) {
isFinished = true;
}
break;
}
eventType = parser.next();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return list;
}
}

A 回答 (1件)

XmlPullParserは、基本的に「全データをロードした後、内容を処理していく」ものですので、表示項目数そのものを減らしても、肝心のダウンロードにかかる時間は変わりませんから短縮化にはならないでしょう。



現状では、RSSやAtomはXML形式で提供されており、XMLは最後まで読み込んでからでないと解析できないので、「途中まで読んで終わらせる」というような使い方は難しいように思えます。もうちょっと別のアプローチを考えないといけませんね。

例えばですが、アクセスして表示したら、その内容をどこかに保管しておき、次に起動したときにはそのキャッシュされている内容をとりあえず表示する。同時に再アクセスし、新しいデータがダウンロード完了した段階で、キャッシュされたデータと比較し、新たな項目だけを追加して表示を更新する。多くのダウンロード型のデータ表示アプリは、だいたいそんな感じでアプローチしていると思います。
    • good
    • 0
この回答へのお礼

good-failure様

いつもご回答ありがとうございます。
根本的に間違った考え方をしていたことに気付きました。

例えばですが、アクセスして表示したら、その内容をどこかに保管しておき、次に起動したときにはそのキャッシュされている内容をとりあえず表示する。同時に再アクセスし、新しいデータがダウンロード完了した段階で、キャッシュされたデータと比較し、新たな項目だけを追加して表示を更新する。多くのダウンロード型のデータ表示アプリは、だいたいそんな感じでアプローチしていると思います。

上記の方法で試してみたいと思います。
ありがとうございました!

お礼日時:2011/06/30 13:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!