2017-01-02 12 views
0

私はarsonistをjsonを使用して共有環境設定に保存し、リストビューに戻そうとしているときにリストビューが変更されないという問題があります。私は多くの記事を読んだことがありますが、毎回同じように表示します。どこに問題があるのか​​考えていますか?Gsonが共有環境設定からデータを読み取る

save.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(thisView.getContext()); 
     SharedPreferences.Editor editor = sharedPrefs.edit(); 
     Gson gson = new Gson(); 

     String json = gson.toJson(mainActivity.getResultsArray()); 

     editor.putString("ResultsArray", json); 
     editor.commit(); 
     Toast saved = Toast.makeText(getContext(), "Uloženo", Toast.LENGTH_LONG); 
     saved.show(); 
    } 
}); 

load.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(thisView.getContext()); 
     Gson gson = new Gson(); 
     String json = sharedPrefs.getString("ResultsArray", ""); 
     Type type = new TypeToken<ArrayList<Result>>(){}.getType(); 
     ArrayList<Result> results = gson.fromJson(json, type); 
     mainActivity.setResultsArray(results); 
     mainActivity.getAdapter().notifyDataSetChanged(); 
     Toast loaded = Toast.makeText(getContext(), "Načteno", Toast.LENGTH_LONG); 
     loaded.show(); 
    } 
}); 
+0

なぜそれが変更になります。あなたのロード]ボタンをクリックしたときに、

Global.save_ListToSharedPreferneces(context, yourArrayList); 

をちょうどこのようなメソッドを取得する呼び出します?あなたのボタンのクリックを保存するだけで、このようなメソッドを保存呼び出しに

public static void save_ListToSharedPreferneces(Context context, ArrayList<YourModelClass> recentDataList) { SharedPreferences sharedpreferences = context.getSharedPreferences("recent_data", Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedpreferences.edit(); Gson gson = new Gson(); String json = gson.toJson(recentDataList); editor.putString("recentDataList", json); editor.commit(); } public static ArrayList<YourModelClass> get_ListFromSharedPreferneces(Context context) { SharedPreferences sharedPrefs = context.getSharedPreferences("recent_data", Context.MODE_PRIVATE); Gson gson = new Gson(); String json = sharedPrefs.getString("recentDataList", ""); Type type = new TypeToken<ArrayList<YourModelClass>>() { }.getType(); ArrayList<YourModelClass> recentDataList= gson.fromJson(json, type); return recentDataList; } 

毎回同じ日付を保存して読み込むことを意味します。 –

+0

私は配列が変更されていない、明らかに同じデータがリストに含まれています – Manza

+0

よく分かりませんが、次回にユーザーがアプリケーションを開くときにデータを読み込もうとしています。 – sudoman281

答えて

0

結果を事前に評価し、.addで配列に追加することで修正しました。

 ArrayList<Result> results = gson.fromJson(json, type); 
     for (Result result: results) { 
      mainActivity.getResultsArray().add(result); 
     } 
     mainActivity.getAdapter().notifyDataSetChanged(); 
2

このメソッドをグローバルクラスに追加すると、どこでも使用できます。

ArrayList<YourModelClass> yourArrayList=new ArrayList(); 
yourArrayList = Global.save_ListToSharedPreferneces(context); 

//Now set your adapter again: 

YourAdapter yourAdapter = new YourAdapter (yourArrayList , getContext()); 
listview.setAdapter(yourAdapter); 
関連する問題