web-dev-qa-db-ja.com

アプリを閉じてデータを取得するときにデータを保存する

ここでのデータの保存/取得に関しては、たくさんの質問があります。自分で調べ物をしていて、「質問する」ことなく自分の答えをなんとか見つけられると本当に思っていたのですが、ここでは答えが見当たらないのではないかと思い始めました。

私の状況:

当然、私はアプリを作っています。アプリを閉じるときに、数値(0または1)またはブール値の単純な配列をそのまま保存します。アプリを起動したら、その配列が存在する場合は検索して、アプリ内で使用するために取得します。

配列が使用されるアクティビティにコードを配置し始めました。しかし、オーバーライドされたonStop()関数をすべてのアクティビティにコピー/貼り付けする必要があるのか​​と思い始めました。または私はメインのアクティビティでそれを行い、どういうわけか他のアクティビティをリンクしますか?.

基本的に、アプリが閉じられたときにアプリが現在オンになっている状態/アクティビティに関係なく、int/boolの配列を保存し、アプリの起動時にそれを開くことができるようにしたいと考えています。

たぶん、自分が探したいものを探す方法がわからなかったので、それを説明するのは正しいことだと感じました。

もっと検索してもかまいませんが、少なくとも誰かが私を正しい方向に向けてくれれば、私は非常に感謝します。

編集:私が説明したものよりもやりたい方法がある場合(つまり、onStop()の代わりに別の状態を使用するなど)は、遠慮なくアイデアを捨ててください。これが実際にアクティビティのライフサイクルに対処する必要があるのは初めてであり、Android開発チュートリアルを確認した後でも少し混乱しています。ほとんどの場合、それらは十分に実行されていないと思います。

17
lilgodwin

アプリケーションで永続データを保存する必要がある場合は、onPause()ではなく、常にonStop()メソッドで保存する必要があります。 Android OSがプロセスを強制終了すると、onStop()およびonDestroy()メソッドは呼び出されません。同様に、onResume()メソッドでデータを取得します。

13
Aniket Thakur

達成したい目的を見ると、 SharedPreferences で十分です。

ドキュメントは述べています:

「SharePreferencesは、プリミティブデータ型の永続的なキーと値のペアを保存および取得できるようにする一般的なフレームワークを提供します。SharedPreferencesを使用して、ブール、浮動小数点数、整数、長整数、文字列などの任意のプリミティブデータを保存できます。このデータはユーザー間で保持されますセッション(アプリケーションが強制終了された場合でも)。」

2
Chintan Soni

SharedPreferenceを使用して少量のデータを保存するか、SQLiteを使用して大量のデータを保存します。このリンクを参照してください

http://developer.Android.com/guide/topics/data/data-storage.html

1
priyank

オブジェクトをシリアル化して、共有設定よりも信頼できるオブジェクトを渡します(共有設定との一貫性に多くの問題がありました)。

public class SharedVariables {

    public static <S extends Serializable> void writeObject(
            final Context context, String key, S serializableObject) {

        ObjectOutputStream objectOut = null;
        try {
            FileOutputStream fileOut = context.getApplicationContext().openFileOutput(key, Activity.MODE_PRIVATE);
            objectOut = new ObjectOutputStream(fileOut);
            objectOut.writeObject(serializableObject);
            fileOut.getFD().sync();
        } catch (IOException e) {
            Log.e("SharedVariable", e.getMessage(), e);
        } finally {
            if (objectOut != null) {
                try {
                    objectOut.close();
                } catch (IOException e) {
                    Log.e("SharedVariable", e.getMessage(), e);
                }
            }
        }
    }

次に、使用するクラスを使用します。

public class Timestamps implements Serializable {

private float timestampServer;

public float getTimestampServer() {
    return timestampServer;
}

public void setTimestampServer(float timestampServer) {
    this.timestampServer = timestampServer;
}

}

次に、変数に書き込む場所はどこでも使用できます。

SharedVariables.writeObject(getApplicationContext(), "Timestamps", timestampsData);
0
Afshin Ghazi