2011-07-27 14 views
3

私は音楽プレーヤーと歌詞ファインダーであるプログラムを書いています。現在、プログラムがロードされるたびに、各音楽ファイルを読み込み、ID3タグを取得してアーティスト名、曲名などを検索する必要があります。複数のファイルを読み込む場合、ID3タグを抽出するプロセスは非常に時間がかかる-消費する。プログラムが実行されるたびに各ID3タグを読み取るのではなく、私のプログラムのプライベートデータディレクトリにID3情報を保存できるようにしたい。クラスをファイルに保存していますか?

私はこのようなシリアル化と保存/読み込みに混乱しています。私はこれを達成するためにFileOutput/InputStreamsまたはObjectOutput/InputStreamsを使用する必要があると推測していますが、私はそれらを理解することはできません。誰かが私を助けて、「ソング」クラスを正しく保存し読み込む方法を教えてもらえますか?以下は、私が保存できる必要がある変数です。

public class Song implements Serializable 
{ 
    private int index = 0, trackLength = 0; 
    private Bitmap albumArtwork = null; 
    private String toString, name, trackNumber, artist, album, lyrics, fileName, releaseDate; 
} 

ご覧のとおり、いくつかの文字列、2つのint、およびビットマップを追跡する必要があります。誰か私に配列またはArrayListをファイルに保存する方法の設定を、「music_info.sav」という名前のファイルに表示することはできますか?また、このファイルが存在するかどうかを確認するにはどうすればよいですか?

答えて

2

独自のファイルのシリアル化を実行する代わりに、SQLLiteデータベースを使用してこの情報を保存してみてください。 http://developer.android.com/guide/topics/data/data-storage.htmlを参照し、それが動作するかどうかを確認してください。

+1

sqliteデータベースを作成し、これらのフィールドを列として格納します。これにより、素早くアクセスできるようになり、並べ替え/検索能力も向上します。 – dontocsata

4
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("song.ser")); 
    out.writeObject(yourArrayList); 
    out.flush(); 
    out.close(); 

ObjectInputStream in = new ObjectInputStream(new FileInputStream("song.ser")); 
    ArrayList<Song> myArrayList = (ArrayList<Song>) in.readObject(); 
    in.close(); 

を読むことを書き込みます。私は、Bitmapオブジェクトについてはよく分からない

EDIT

。独自のreadObject()メソッドとwriteObject()メソッドをロールバックする必要があります。

ここには、ビットマップをシリアル化およびデシリアライズするためのリンクがあります。

http://www.johnwordsworth.com/2011/06/serializing-and-de-serializing-android-graphics-bitmap/

+0

ビットマップはそのようにシリアル化されますか? Serializableを実装していません。 – dontocsata

+0

@dontoscata - あなたが正しいです。私はBitmapオブジェクトに気付かなかった。 – Kal

+0

これは私がもともとそれをやろうとした方法です。私はまだ混乱していた。私は2つの質問を持っています... 1.あなたがそれをやっている方法は、ファイルが存在する必要があります。ファイルが存在しない場合はどうすれば作成できますか? ObjectInputStreamを作成してExceptionをキャッチしようとします。例外がキャッチされた場合は、ファイルを作成します(ただし、この空のファイルを作成する方法はわかりません)。 2.これにより、ObjectInput/OutputStream関数はどのように変更されますか?私はwriteObjectとreadObjectをいつどこで呼び出すのか分かりません。 – jas7457

関連する問題