无法在Parse.com回调中保存变量状态

时间:2014-07-02 03:39:55

标签: java android multithreading user-interface parse-platform

我无法通过查询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 {
            }
        }
    });
}

2 个答案:

答案 0 :(得分:0)

问题是查询在另一个完成onCreate()方法完成后的线程上运行,之后多久将取决于网络问题和查询复杂性。

您需要做的是在设置over = temp之后调用另一种方法,可能将其编组到主UI线程,让UI或其他代码知道现在已填充over

答案 1 :(得分:0)

我设法通过使用AsyncTask来解决这个问题。基本上我在后台线程中进行了查询,并将从“doInBackground”获取的信息发送到“post”方法。由于“post”方法是在主线程中完成的,我可以将变量的状态保存在那里而不会丢失它。