【问题标题】:Can't Save State of Variable inside Parse.com Callback无法在 Parse.com 回调中保存变量状态
【发布时间】:2014-07-02 03:39:55
【问题描述】:

我无法保留通过后台线程通过查询 Parse 数据库填充的数组列表的内容。下面是我的代码。我制作了一个数组列表以供意图使用/发送到其他活动,但即使我尝试将其保存在查询中,它也不会保留其内容。

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 {
            }
        }
    });
}

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!几个问题,查询和完成方法是否在后台线程中运行?另外,我创建了一个单独的方法来尝试使用 context.over = temp,但不接受 context.over。您如何建议我在 done 方法中使用另一种方法?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-05-06
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多