2

から作成されたHashMap<String, List<String>>拡張リストがあります。ユーザーが拡張リストのエントリを編集できるように、その値を設定などに保存する可能性があるかどうかを知りたいです。任意の情報、提案をいただければ幸いです。

現在、プログラムでリストを作成していますが、どの設定にも保存されていません:

public class MainActivity extends Activity{
        ExpandableListAdapter listAdapter;
        ExpandableListView expListView;
        List<String> listDataHeader;
        HashMap<String, List<String>> listDataChild;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);




            // get the listview
            expListView = (ExpandableListView) findViewById(R.id.lvExp);

            // preparing list data
            prepareListData();

            listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);

            // setting list adapter
            expListView.setAdapter(listAdapter);


        }

        /*
         * Preparing the list data
         */
        private void prepareListData() {
            listDataHeader = new ArrayList<String>();
            listDataChild = new HashMap<String, List<String>>();

            // Adding header data
            listDataHeader.add("Vegetables");
            listDataHeader.add("Fruits");
            listDataHeader.add("Drinks");

            // Adding child data
            List<String> vegetables = new ArrayList<String>();
            vegetables.add("Tomatoes");
            vegetables.add("Potatoes");
            vegetables.add("Cucumbers");
            vegetables.add("Pumpkins");
            vegetables.add("Peppers");
            vegetables.add("Onions");
            vegetables.add("Garlic");

            List<String> fruits = new ArrayList<String>();
            fruits.add("Strawberries");
            fruits.add("Blackcurrants");
            fruits.add("Redcurrant");
            fruits.add("Gooseberry");
            fruits.add("Kiwifruit");
            fruits.add("Grape");

            List<String> drinks = new ArrayList<String>();
            drinks.add("Vodka");
            drinks.add("Milk");
            drinks.add("Water");
            drinks.add("CocaCola");
            drinks.add("Sprite");

            listDataChild.put(listDataHeader.get(0), vegetables); // Header, Child data
            listDataChild.put(listDataHeader.get(1), fruits);
            listDataChild.put(listDataHeader.get(2), drinks);
        }


        private String does(String child) {
            Intent intent = new Intent(this, Confirmation.class);
            intent.putExtra("key", child);
            startActivity(intent);
            return null;
        }

}

ログ

09-29 17:21:42.039: E/dalvikvm(25076): Could not find class 'com.google.gson.Gson', referenced from method lt.whiteGroup.ultimateshoppinglist.MainActivity.prepareListData
09-29 17:21:42.125: E/AndroidRuntime(25076): FATAL EXCEPTION: main
09-29 17:21:42.125: E/AndroidRuntime(25076): java.lang.NoClassDefFoundError: com.google.gson.Gson
09-29 17:21:42.125: E/AndroidRuntime(25076):    at lt.whiteGroup.ultimateshoppinglist.MainActivity.prepareListData(MainActivity.java:117)
09-29 17:21:42.125: E/AndroidRuntime(25076):    at lt.whiteGroup.ultimateshoppinglist.MainActivity.onCreate(MainActivity.java:45)
09-29 17:21:42.125: E/AndroidRuntime(25076):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-29 17:21:42.125: E/AndroidRuntime(25076):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
09-29 17:21:42.125: E/AndroidRuntime(25076):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
09-29 17:21:42.125: E/AndroidRuntime(25076):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
09-29 17:21:42.125: E/AndroidRuntime(25076):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
09-29 17:21:42.125: E/AndroidRuntime(25076):    at android.os.Handler.dispatchMessage(Handler.java:99)
09-29 17:21:42.125: E/AndroidRuntime(25076):    at android.os.Looper.loop(Looper.java:130)
09-29 17:21:42.125: E/AndroidRuntime(25076):    at android.app.ActivityThread.main(ActivityThread.java:3687)
09-29 17:21:42.125: E/AndroidRuntime(25076):    at java.lang.reflect.Method.invokeNative(Native Method)
09-29 17:21:42.125: E/AndroidRuntime(25076):    at java.lang.reflect.Method.invoke(Method.java:507)
09-29 17:21:42.125: E/AndroidRuntime(25076):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
09-29 17:21:42.125: E/AndroidRuntime(25076):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
09-29 17:21:42.125: E/AndroidRuntime(25076):    at dalvik.system.NativeStart.main(Native Method)
4

1 に答える 1

4

あなたはかなり複雑な構造を持っているので、あなたの場合、Gsonライブラリを使用してシリアライズ(変換) HashMap<String, List<String>>String、基本的な文字列として設定に保存することを好みます。

例として:

Gson gson = new Gson();
String str = gson.toJson(listDataChild);

str文字列として保存した後

それを取得するには、Preferences から String を単一として抽出し、好きなものStringをロードします。Map

Gson gson = new Gson();
Type type = new TypeToken<HashMap<String, List<String>>>(){}.getType();
HashMap<String, List<String>> map = gson.fromJson(str, type);

このようにして、任意のクラスを保存し、次のロード時に戻すことができます。

補足として

この手法を使用して、変更のたびにすべてのアプリケーション構成を設定にハンドラーとして保存します。これにより、クラッシュが発生した場合でも、ユーザーが設定したデータが保存されます。

ただし、それでもマップを保存したい場合は、この回答をSOで参照してください

于 2013-09-28T06:16:02.443 に答える