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

Я вижу, как вы присваиваете «Hospital» переменной , но что такое 'm2Status', где он объявлен, и как вы пытаетесь получить к нему доступ в другом контексте? – mbm29414

+0

Я назначил его в верхней части класса (но в классе) как: Защищенная строка m2Status. Я пытаюсь получить доступ к нему за пределами Query, чтобы добавить его к новому пользователю с user.put («Hospital», m2Status); Когда я запускаю его, он дает нулевое значение, когда я использую m2Status вне Query, но когда я использую его внутри, он действительно дает значение, которое мне нужно. –

+0

И вы уверены, что пытаетесь получить доступ к значению после того, как он был заполнен запросом? Я предполагаю, что вы знаете, что запрос выполняется асинхронно, не так ли? – mbm29414

ответ

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! –

+0

@MauricioSilva Awesome! Рад был помочь! Продолжайте учиться столько, сколько сможете! – mbm29414

Смежные вопросы