在Android中刷新上下文

时间:2015-02-07 22:09:17

标签: android android-context

我不知道我是否正确理解了这个问题,但我有一个奇怪的问题。我有从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以某种方式记住上下文并检索旧上下文?

0 个答案:

没有答案