2017-01-02 6 views
0

У меня проблема, когда я сохраняю свой arraylist в общих настройках с помощью json, и я пытаюсь загрузить его обратно в свой список, listview не изменяется. Я читал много статей, но они показывают это одинаково каждый раз. У вас есть идея, где может быть проблема?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

Почему бы это изменить? Я имею в виду, что вы каждый раз сохраняете и загружаете ту же дату. –

+0

I массив не изменен, список, очевидно, будет содержать те же данные – Manza

+0

Ну, извините за непонятность, я пытаюсь загрузить данные, когда пользователь открывает приложение в следующий раз. – sudoman281

ответ

0

Я исправил его, указав результаты и добавив их в массив .add.

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

Добавить этот метод в свой глобальный класс, чтобы вы могли использовать его в любом месте.

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; 
    } 

на кнопку сохранения мыши просто вызов сохранить метод, как это:

Global.save_ListToSharedPreferneces(context, yourArrayList); 

на кнопку загрузки мыши просто позвонить получить метод, как это:

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

//Now set your adapter again: 

YourAdapter yourAdapter = new YourAdapter (yourArrayList , getContext()); 
listview.setAdapter(yourAdapter);