我不知道我是否正确理解了这个问题,但我有一个奇怪的问题。我有从Parse.com服务器获取的列表,我通过"标签"过滤数据。有时我会改变标签"使用DialogFragment并刷新列表,但在2-3更改后列表显示错误的数据。我调试了它,似乎从数据库中获取了错误的数据,这很奇怪,因为在另一个Fragment窗口中,相同的方法返回正确的答案。 以下是我从Parse获取列表的方法:
YoursEventsAsync yoursEventsAsync = new YoursEventsAsync(Constants.LIMIT, getActivity());
yoursEventsAsync.asyncResponse = this;
yoursEventsAsync.execute();
然后,在这个AsyncTask中我得到这样的数据:
@SafeVarargs
@Override
protected final ArrayList<Event> doInBackground(ArrayList<Event>... params) {
return ParseAdapter.getInstance().getEventsFromServer(limit, context);
}
这是我的主要职能,负责获得有时好的有时不好的数据:
public ArrayList<Event> getEventsFromServer(int limit, Context context) {
ParseQuery<ParseObject> query = ParseQuery.getQuery("Event");
query.whereContainedIn("tags", DatabaseAdapter.getTagNames(context));
query.setLimit(limit);
query.include("createdBy");
query.orderByDescending("createdAt");
ArrayList<Event> events = new ArrayList<>();
try {
List<ParseObject> parseEvents = query.find();
events = setEventList(parseEvents);
} catch (ParseException e) {
e.printStackTrace();
}
return events;
}
我调试了第3行,它有时工作正常,有时不行。
这是DatabaseAdapter.getTagNames方法:
public static List<String> getTagNames(Context context) {
Realm realm = Realm.getInstance(context);
RealmQuery<Tag> query = realm.where(Tag.class);
RealmResults<Tag> tagResults = query.findAll();
List<String> tags = new ArrayList<>();
for (Tag tag : tagResults) {
tags.add(tag.getName());
}
return tags;
}
正如我之前所说,如果我打开另一个片段,它使用相同的方法&#39; getTagNames&#39;它工作正常。这就是为什么我认为问题出在上下文中。是否有可能AsyncTask以某种方式记住上下文并检索旧上下文?