尝试将数据加载到共享首选项或从共享首选项加载数据时,应用程序崩溃



在我的应用程序中,我接收通知发布事件并过滤通知,然后将其保存在对象模型的共享首选项中,并使用哈希图:

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

每当发布新的通知时,我都会从中提取数据,并将其保存在本地hashmap和共享偏好中。在打开应用程序时,我将共享偏好中的数据加载到本地列表中。

我无法理解的是,每当发布新通知时,我的应用程序中就会出现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.

您好!首先,您应该将saveMap((函数的调用转移到后台线程。例如doInBackground((内部。

此外,我建议您考虑使用数据库来存储通知——共享首选项中存储的通知太复杂了。

最新更新