0

私は現在、学生プランナーのようなAndroidアプリケーションに取り組んでいます。私のバックエンドはすべてJavaであり、バックエンドからarraylistに作成したオブジェクトを格納しているため、現在スタックしています。Javaであるため、これらのオブジェクトはプログラムが終了するとすぐに消えます。次回アプリケーションを起動したときに取得するためにJavaオブジェクトを保存する最も簡単な方法は何ですか?どんな助けでも大歓迎です!2.3とEclipse(juno)で開発中です。

4

2 に答える 2

2

Android デベロッパー チュートリアルにリストされているデータ ストレージ オプションの 1 つが最も簡単です。どちらが最適かは、保存しているデータの量とアクセス方法によって異なります。このページにあるように、SharedPreferencesクラスは少数のアイテムに最適です。より大きなデータ セットの場合は、Java シリアル化またはその他の方法を使用して、電話のストレージ上のファイルに書き込むことができます。また、データが大きい場合や構造化されたアクセスが必要な場合は、SQLite データベースが最適です。

于 2012-10-30T00:06:37.800 に答える
0

共有設定を使用してデータを保存できます。を使用SharedPreferencesすると、アプリケーションでプリミティブデータ型のキーと値のペアを永続化できます。単一のキーで全体を格納することはできませんがArrayList、配列を反復処理して、リスト内の値ごとにキーを体系的に生成することはできます。私は通常次のようなことをします:

public class SomeActivity extends Activity {
    private ArrayList<Data> list; //We'll persist this array

    /* snip */

    //These strings can be anything - you just need something you can use to systematically generate distinct keys
    public static final String LIST_KEY = "SomeActivity_List";
    public static final String LIST_LENGTH_KEY = "SomeActivity_ListLength";

    /**
     * How this method works: It starts by getting a SharedPreferences object,
     * which offers an API for persisting data. It then systematically generates
     * Strings like "SomeActivity_List1", "SomeActivity_List2", "SomeActivity_List3",
     * and so on to use as keys fot the 1st, 2nd, 3rd, etc. elements in the list. Then
     * it Data.saveData(), a method defined below in the Data class, in order to give
     * each Data object in the ArrayList an opportunity to persist its primitive
     * members in the SharedPreferences.
     *
     * SomeActivity.restoreList() works similarly.
     */
    public void saveList() {
        SharedPreferences prefs = getPreferences(); //This method is part of the Activity class
        SharedPreferences.Editor editor = prefs.getEditor();

        //Save the length of the list so that when we restore it, we know how many
        //Data objects to recreate.
        editor.putInt(LIST_LENGTH_KEY, list.size());
        editor.commit();

        //This for loop is important - note how we concatenate i to each of the keys to give each element in list a distinct key
        for(int i = 0; i < list.size(); i++)
        {
            String identifier = LIST_KEY + Integer.toString(i); //generate distinct keys
            list.get(i).saveData(identifier, prefs);
        }
    }

    public void restoreList() {
        SharedPreferences prefs = getPreferences();

        int length = prefs.getInt(LIST_LENGTH_KEY);

        for(int i = 0; i < length; i++)
        {
            String identifier = LIST_KEY + Integer.toString(i); //re-generate distinct keys
            Data data = new Data();
            data.restoreData(identifier, prefs);
            list.addLast(data);
        }
    }

    public static class Data {
        private int i;
        private double j;
        private String s;

        public static final String I_KEY = "Data_I"
        public static final String J_KEY = "Data_J" //strings can really be whatever, as long as they're distinct.
        public static final String S_KEY = "Data_K"

        /**
         * How this method works: The SomeActivity.saveList() method generates a
         * unique String ("identifier") for each of the Data objects it contains.
         * This method uses that distinct string and makes some more distinct keys
         * to store each of Data's primitive members.
         *
         * restoreData() works similarly when it rebuilds Data objects
         */
        public saveData(String identifier, SharedPreferences prefs) {
            SharedPreferences.Editor editor = prefs.getEditor();
            editor.putInt(I_KEY + identifier, i);
            editor.putDouble(J_KEY + identifier, j);
            editor.putString(S_KEY + identifier, s);
            editor.commit();
        }

        public restoreData(String identifier, SharedPreferences prefs) {
            i = prefs.getInt(I_KEY + identifier);
            j = prefs.getDouble(J_KEY + identifier);
            s = prefs.getString(S_KEY + identifier);
        }
    }
}

このアプローチは再帰的に機能します。たとえば、Dataのフィールドの1つにArrayListがある場合、そのリスト内のすべての値をSharedPreferencesにも体系的に格納できます。

参考:SharedPreferencesを使用することの意味の1つは、ユーザーがアプリをアンインストールするか、アプリデータをクリアすると、保存されているリストが削除されることです。データの性質に応じて、この動作が必要な場合と不要な場合があります。

于 2012-10-30T00:32:45.350 に答える