2015-01-26 118 views
0

我试图从解析中访问一个查询内部的一个查询,但是当查询结束时它会被销毁。正如你在下面的代码中看到的那样,我将它输出到控制台,它确实有效,但是如果我尝试将它分配给一个变量,然后使用它,它将返回null。任何帮助,将不胜感激。从Parse.Query分配一个对象到一个全局变量

ParseQuery<ParseObject> query = ParseQuery.getQuery("Hospitales"); 
      query.whereEqualTo("Codigo", id); 
      query.getFirstInBackground(new GetCallback<ParseObject>() { 
       public void done(ParseObject object, ParseException e) { 
        if (object == null) { 
         Log.d("score", "The getFirst request failed."); 
        } else { 
         Log.d("id", "Retrieved the object."); 
         String status = object.getString("Hospital"); 
         m2Status = object.getString("Hospital"); 
         System.out.println("Hospital: " + status); 
         System.out.println(status + m2Status); 
        } 
       } 
      }); 
+0

我看你是如何分配“医院”给一个变量,但什么是'm2Status',它在哪里声明,以及如何在另一个上下文中访问它? – mbm29414 2015-01-27 01:17:56

+0

我将它在类的顶部(但在类中)指定为:受保护的字符串m2Status。我试图在Query之外访问它,并将其添加到具有user.put(“Hospital”,m2Status)的新用户; 当我运行它时,当在查询外部使用m2Status时它会给出一个空值,但是当我在里面使用它确实会给出我需要的值。 – 2015-01-27 01:37:07

+0

你确定你只是试图访问它的查询填充后的值?我假设你意识到查询异步运行,对吧? – mbm29414 2015-01-27 01:39:54

回答

0

所以,基本上,你的问题似乎是你正在运行一个异步查询,并试图在查询返回之前访问该变量。

下面是你可以设置你的代码中使用的变量推迟,直到你可以确信你有一个值,实际使用:

private void runQuery() { 
    ParseQuery<ParseObject> query = ParseQuery.getQuery("Hospitales"); 
    query.whereEqualTo("Codigo", id); 
    query.getFirstInBackground(new GetCallback<ParseObject>() { 
     public void done(ParseObject object, ParseException e) { 
      if (object == null) { 
       Log.d("score", "The getFirst request failed."); 
       // You don't have a good value to use, so figure 
       // out a way to handle that scenario 
      } else { 
       Log.d("id", "Retrieved the object."); 
       String status = object.getString("Hospital"); 
       m2Status = object.getString("Hospital"); 
       System.out.println("Hospital: " + status); 
       System.out.println(status + m2Status); 
       // You have a good value to use, so 
       // now you can actually use it 
       afterQueryProcessing(); 
      } 
     } 
    }); 
} 
private void afterQueryProcessing() { 
    // You can access m2Status here reliably, 
    // assuming you only call this method 
    // as shown above, but you should still 
    // use defensive programming 
    if (m2Status != null) { 
     // Now you know you have a value to use... 
    } 
} 
+0

谢谢大家的帮助!你真的很具描述性,我得到了我需要的工作:D! – 2015-01-27 22:07:31

+0

@MauricioSilva太棒了!乐于帮助!不断努力尽可能地学习! – mbm29414 2015-01-27 22:12:48