Как создать несколько ArrayLists в асинхронной задаче, используя строку Gson? - PullRequest
0 голосов
/ 19 мая 2019

Я пытаюсь заполнить RecyclerView объектами Mood.Эти объекты создаются в Activity, которая связана с RecyclerView Activity (MoodsActivity), когда создается Mood, и сохраняется в SharedPrefs через строку Gson.Recycler не заполняется, и я получаю сообщение о том, что основной поток может выполнять слишком много работы.Сейчас я пытаюсь реализовать асинхронную задачу, чтобы взять строку Gson, которая представляет собой список объектов моего настроения, разделить настроения на отдельные списки ArrayLists и затем вернуть их.

Я пытался использовать асинхронную задачу, но я изо всех сил пытаюсь реализовать ее так, чтобы она возвращалась.Кажется, он не любит использовать общие настройки.

    try {
        ArrayList<Mood> historyList = gson.fromJson(history, ArrayList.class);
        ArrayList<String> moodNames = new ArrayList<>();
        ArrayList<String> moodGenres = new ArrayList<>();
        ArrayList<Color> moodColors = new ArrayList<>();

        for (int i = 0; i < historyList.size(); i++){
            moodNames.add(historyList.get(i).getName());
            moodGenres.add(historyList.get(i).getGenre());
            moodColors.add(historyList.get(i).getColor());
        }
        createRecycler(moodNames, moodGenres, moodColors);
    } catch (Exception e){
        System.out.print("Couldn't load any moods");
    }


        View v = findViewById(buttonId);

        Button preferenceButton = (Button) v;

        preferenceButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent preferencesPage = new Intent(view.getContext(), PreferencesActivity.class);
                startActivity(preferencesPage);
            }
        });

    }

    public void createRecycler(ArrayList<String> names, ArrayList<String> genres, ArrayList<Color> colors){
    System.out.print("Reached");
    RecyclerView rView = findViewById(R.id.moodlistView);
    RecycleViewAdapter rAdapt = new RecycleViewAdapter(names, genres, colors, this);
    rView.setAdapter(rAdapt);
    rView.setLayoutManager(new LinearLayoutManager(this));
    }

Мой класс Async ниже

    public class DoSomeTasks extends AsyncTask<String, Integer, String> {

    @Override
    protected String doInBackground(String... strings) {
        SharedPreferences prefs = getPreferences(getBaseContext().MODE_PRIVATE); //doesn't like using getPrefs

        try {

            String history = prefs.getString("history", "DEFAULT");

            Gson gson = new Gson();
            ArrayList<Mood> historyList = gson.fromJson(history, ArrayList.class);
            ArrayList<String> moodNames = new ArrayList<>();
            ArrayList<String> moodGenres = new ArrayList<>();
            ArrayList<Color> moodColors = new ArrayList<>();

            for (int i = 0; i < historyList.size(); i++){
                moodNames.add(historyList.get(i).getName());
                moodGenres.add(historyList.get(i).getGenre());
                moodColors.add(historyList.get(i).getColor());
            }
            createRecycler(moodNames, moodGenres, moodColors);
        } catch (Exception e){
            System.out.print("Couldn't load any moods");
        }
        return null;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...