0

問題:オブジェクト (1000 の連絡先) の巨大なマップを SharedPreferences に保存したいと考えています。

初めてすべての連絡先を読み込み、すべての写真をbase64文字列に変換するCordovaアプリケーションがあります。

通常、このプロセスには約 30 秒かかります。そのため、すべての連絡先を String として SharedPreferences に保存し、後ですばやく読み込むことが私の目標です。

私はGSONライブラリを使用していますが、何をしても次のようになります:

java.lang.OutOfMemoryError
       at java.lang.String.<init>(String.java:354)
       at java.lang.String.<init>(String.java:171)
       at java.io.ByteArrayOutputStream.toString(ByteArrayOutputStream.java:137)

これは、マップを変換する方法ですがByteArrayOutputStream、最後の行で例外を取得します。out.toString()


public static String getStrFromGroupsListJSONObject(ConcurrentHashMap<String, WmContactImage> contactMap){

        Gson gson = getInstance();  
        OutputStream out = new ByteArrayOutputStream();

        try {
            JsonWriter writer = new JsonWriter(new OutputStreamWriter(out, "UTF-8"));

            Iterator<String> it = contactMap.keySet().iterator();

            WmContactImage img;

            writer.beginObject(); // {


            while(it.hasNext()){
                String key = it.next();

                writer.name(key);

                img = contactMap.get(key);

                gson.toJson(img, WmContactImage.class, writer);
            }           

            writer.endObject();   // }
            writer.close();             
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return out.toString();
    } 

Map を SharedPreferences に保存する他の方法はありますか、またはどうにかして保存できOutputStreamますか?

4

2 に答える 2

1

ファイルhttp://developer.android.com/guide/topics/data/data-storage.htmlを使用します。共有設定はビッグデータを保存することを想定していません。ファイルまたは sqlote データベースを使用します。

于 2014-09-21T21:12:56.967 に答える
0

大量のデータを保存したい場合、共有設定は適していません。おそらく、デバイスで SQLite データベースを使用する必要があります。ドキュメントでそれを正確に行う方法を読むことができます

于 2014-09-21T21:13:23.007 に答える