我无法通过查询Parse数据库来保留我通过后台线程填充的arraylist的内容。以下是我的代码。我通过意图使用/发送arraylist到其他活动,但即使我尝试将其保存在查询中,它也不会保留其内容。
onCreate(){
ArrayList<FunObject> over = new ArrayList<FunObject>();
separateMethod();
//over.size() is still equal to 0.
}
separateMethod() {
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> players, ParseException e){
if (players != null && players.size()>0 ){
ArrayList<PlayerInfo> temp = new ArrayList<PlayerInfo>();
for (ParseObject f : players) {
temp.add(new PlayerInfo (f.getString("name"), f.getString("champion"), f.getString("summoner1"), f.getString("summoner2"), "mid", f.getString("kills") + " / " + f.getString("deaths") + " / " + f.getString("assists")));
}
over = temp
//This line, I try to set value of my over arraylist, but it
//doesnt save when I leave the query
} else {
}
}
});
}
答案 0 :(得分:0)
问题是查询在另一个完成onCreate()
方法完成后的线程上运行,之后多久将取决于网络问题和查询复杂性。
您需要做的是在设置over = temp
之后调用另一种方法,可能将其编组到主UI线程,让UI或其他代码知道现在已填充over
答案 1 :(得分:0)
我设法通过使用AsyncTask来解决这个问题。基本上我在后台线程中进行了查询,并将从“doInBackground”获取的信息发送到“post”方法。由于“post”方法是在主线程中完成的,我可以将变量的状态保存在那里而不会丢失它。