2015-01-26 124 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