2016-04-22 14 views
0

私のAndroidアプリケーションでは、オブジェクトのArraylistをSharedPreferencesに保存/ロードするためにGsonを使用しました。私のコードはGsonを使用しています。Gsonを使用する/使用しないで、SharedPreferencesにオブジェクトのリストを保存してロードする方法は?

public static ArrayList<RequestModal> getModalList(Context ctx) { 
    Gson gson = new Gson(); 
    String json = getSharedPreferences(ctx).getString("ModalList", new Gson().toJson(new ArrayList<>())); 
    Type type = new TypeToken<ArrayList<RequestModal>>() {}.getType(); 
    return gson.fromJson(json, type); 
} 

ここで、「RequestModal」は、文字列と整数のビットを含む単純なオブジェクトです。 "オンライン"の場合はうまく動作します。しかし、インターネットがオフラインの場合、永遠に以下のコードで動作します。

Type type = new TypeToken<ArrayList<RequestModal>>() {}.getType(); 

どうすれば解決できますか? Gsonを使用する/使用しない、このような機能を実装する方法は何ですか?いいアイデアを持っている人を助けてください。 ありがとうございます。

+0

役立ちます"オンライン"の場合はうまく機能します。しかし、インターネットがオフラインの場合、永遠に以下のコードで動作します。 --->私はここであなたを得ない。あなたのコードはインターネットにどのように依存していますか? –

+0

はい、あなたは正しいです。私のコードはインターネットに依存しません。しかし、いったんネットワークがオフラインになると、永遠に "TypeToken >(){} .getType();"が動作し、停止やクラッシュは発生しません。 –

答えて

0

あなたはGsonせずにこれを実装することができますだけで、ModalListと呼ばれる共有環境設定に保存されている1あなたのケースでは、文字列を取り、私の構造上の値を挿入している

public static EpisodeDetails parseEpisodeDetails(String content) { 
    EpisodeDetails episodeDetails = new EpisodeDetails(); 
    try { 
     JSONObject jsonObject = new JSONObject(content); 
     episodeDetails.title = jsonObject.getString("title"); 
     episodeDetails.subTitle = jsonObject.getString("subtitle"); 
     episodeDetails.synopsis = jsonObject.getString("synopsis"); 
     episodeDetails.ends_on = jsonObject.getString("ends_on"); 

     JSONArray images = jsonObject.getJSONArray("image_urls"); 
     if (images.length() > 0) { 
      episodeDetails.image_url = images.getString(0); 
     } 

    } catch (JSONException e) { 
     e.printStackTrace(); 
     return null; 
    } 
    return episodeDetails; 
} 

私は何をやっています私のコード構造はEpisodeDetailsと呼ばれ、あなたのコードには対応者はRequestModalです。もしあなたがコードを介してそれをやりたいと思っていないと私はジャクソンをお勧めします別のライブラリを試してみたい。

このライン上でもう一つ、:

String json = getSharedPreferences(ctx).getString("ModalList", new Gson().toJson(new ArrayList<>())); 

あなたの2番目のパラメータは必要ありません。 getStringは、キーを第1パラメータとしてロードし、デフォルト値を第2パラメータ(空の結果の場合)として使用します。これを""またはnullに変更できます。

0

よくある問題の解決方法はTinyDBです。それは、sharedPrefs内のオブジェクトのArrayListsを保存するためにGsonを利用して、その使用量は

Person person = new Person("john", 24); 
tinydb.putObject("user1", person); 

ArrayList<Person> usersWhoWon = new ArrayList<Person>(); 
tinydb.putListObject("allWinners", usersWhoWon); 

ようにシンプルであり、それは、使用方法の詳細に

希望を確認するには、上記の私の与えられたリンクをチェックアウトのthatsこの

関連する問題