Приложение вылетает при попытке загрузить данные в общие настройки и из них - PullRequest
0 голосов
/ 19 ноября 2018

В моем приложении я беру событие, опубликованное в уведомлении, и фильтрую уведомление, затем сохраняю его в общем предпочтении из объектной модели и использую для него хэш-карту:

  Map<String,  List<Model>> 

Я использую asynctask для получения списка обратно в приложении из общих настроек:

    private class FetchData extends AsyncTask<Void,Void,Map<String,List<Model>>> {

    @Override
    protected Map<String, List<Model>> doInBackground(Void... voids) {
        SharedPreferences shared;
        Gson gson = new Gson();
        shared = getSharedPreferences("MyVariables", Context.MODE_PRIVATE);
        modelList = gson.fromJson(
                shared.getString("My_map", null),
                new TypeToken<HashMap<String, List<Model>>>() {
                }.getType());
        return modelList;
    }

    @Override
    protected void onPostExecute(Map<String, List<Model>> stringListMap) {
        super.onPostExecute(stringListMap);
        if(modelList!=null) {
            keys = getKeys(modelList);
            adapter = new CustomListAdapter(getApplicationContext(), keys);
            list.setAdapter(adapter);
        }
    }
}

Сохранение данных в этой функции:

     private void saveMap(Map<String,List<Model>> inputMap){
    SharedPreferences shared;
    SharedPreferences.Editor editor;

    shared = getSharedPreferences("MyVariables", Context.MODE_PRIVATE);
    editor = shared.edit();

    Gson gson = new Gson();
    String json = gson.toJson(inputMap);
    editor.putString("My_map", json);
    editor.commit();
}

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

Что я не могу понять, так это причина появления anr в моем приложении, когда публикуется новое уведомление.

It has been 8006.8ms since event, 8006.4ms since wait started.  Reason: Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago.  Wait queue length: 2.  Wait queue head age: 9112.1ms.

 Reason: Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago.  Wait queue length: 2.  Wait queue head age: 9112.1ms.

1 Ответ

0 голосов
/ 19 ноября 2018

Добрый день! Прежде всего, вам следует перенести вызов функции saveMap () в фоновый поток. Например, внутри doInBackground ().

Также я рекомендую подумать об использовании базы данных для хранения уведомлений - их слишком сложно хранить в общих настройках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...