お世話になっております。
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;
}
}
No.1ベストアンサー
- 回答日時:
XmlPullParserは、基本的に「全データをロードした後、内容を処理していく」ものですので、表示項目数そのものを減らしても、肝心のダウンロードにかかる時間は変わりませんから短縮化にはならないでしょう。
現状では、RSSやAtomはXML形式で提供されており、XMLは最後まで読み込んでからでないと解析できないので、「途中まで読んで終わらせる」というような使い方は難しいように思えます。もうちょっと別のアプローチを考えないといけませんね。
例えばですが、アクセスして表示したら、その内容をどこかに保管しておき、次に起動したときにはそのキャッシュされている内容をとりあえず表示する。同時に再アクセスし、新しいデータがダウンロード完了した段階で、キャッシュされたデータと比較し、新たな項目だけを追加して表示を更新する。多くのダウンロード型のデータ表示アプリは、だいたいそんな感じでアプローチしていると思います。
good-failure様
いつもご回答ありがとうございます。
根本的に間違った考え方をしていたことに気付きました。
例えばですが、アクセスして表示したら、その内容をどこかに保管しておき、次に起動したときにはそのキャッシュされている内容をとりあえず表示する。同時に再アクセスし、新しいデータがダウンロード完了した段階で、キャッシュされたデータと比較し、新たな項目だけを追加して表示を更新する。多くのダウンロード型のデータ表示アプリは、だいたいそんな感じでアプローチしていると思います。
上記の方法で試してみたいと思います。
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Ruby vscode 文字化け 1 2022/05/21 19:17
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列にnullを代入すると、null...
-
ORA-01858: 数値を指定する箇所...
-
getStringの値がNULLの時の処理
-
BOOL値を逆にしたい
-
java 引数 戻り値のあるメソッド
-
Java配列でNullPointerExceptio...
-
C# ListBoxのインデックスの値...
-
逆コンパイルの見方について(...
-
Stringを返す getText()メソッ...
-
HashMapがおかしい
-
JSPで複数のSQL実行につ...
-
応用情報技術者試験の令和元年...
-
1~100までの数字を表示し、か...
-
ループ処理の際、最後だけ","を...
-
Javaで改行などが出来ないのです。
-
ダブルクォーテーションのrepla...
-
C言語のポインターに関する警告
-
JSPやサーブレットでSystem.out...
-
n番目に大きな値を探索する
-
java キーボード入力された値の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORA-01858: 数値を指定する箇所...
-
配列にnullを代入すると、null...
-
Java配列でNullPointerExceptio...
-
BOOL値を逆にしたい
-
getStringの値がNULLの時の処理
-
C# ListBoxのインデックスの値...
-
eclipseでoracle接続時のエラー...
-
gas カレンダー祭日設定でエラー
-
Javascript エラーメッセージが...
-
java 引数 戻り値のあるメソッド
-
C#でラジオボタンとコンボボッ...
-
MySQLのテーブル名を変数に置い...
-
jsp/Servletの動的に増えるフォ...
-
例外でBeanUtils.populateが、...
-
Stringを返す getText()メソッ...
-
JSPで複数のSQL実行につ...
-
逆コンパイルの見方について(...
-
if文を通らない
-
この世で連日正規表現について...
-
逆コンパイルの見方について(...
おすすめ情報