有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法在解析中保存变量的状态。com回调

通过查询解析数据库通过后台线程填充的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) 个答案

  1. # 1 楼答案

    我通过使用异步任务来解决这个问题。基本上,我在后台线程中执行查询,并将从“doInBackground”获取的信息发送到“post”方法中。因为“post”方法是在主线程中完成的,所以我可以在其中保存变量的状态,而不会丢失它

  2. # 2 楼答案

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

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