2015-12-20 1 views
2

Я попытался создать метод, который получит пользователя по имени пользователя. Я использую синтаксический анализ. Вот мой метод:Android - Parse.com - Возвращаемый объект из запроса обратного вызова

public ParseUser getUserByName(String name){ 
    ParseUser user; 
    ParseQuery<ParseUser> query = ParseQuery.getQuery("_User"); 
    query.whereEqualTo("username", name); 
    query.getFirstInBackground(new GetCallback<ParseUser>() { 
     public void done(ParseUser result, ParseException e) { 
      if (result== null) { 
       Log.d("user", "Get user failed."); 
      } else { 
       user= result; // Compile error here, said: "Variable 'user' need to be declared final" 
      } 
     } 
    }); 
    return user; 
} 

Он выполнил ошибку, и сказал, что: «Variable„пользователь“должен быть объявлен окончательный». Но, если бы я заявил:

final ParseUser user; 

поэтому я не могу присвоить результат поиска пользователя:

else { 
      user= result; // Can't assign to user, because it's final. 
    } 

Так как я могу получить и вернуть результат поиска из обратного вызова запроса? Пожалуйста, помогите. Благодарю.

ответ

2

попробовать этот

public ParseUser getUserByName(String name){ 
    ParseQuery<ParseUser> query = ParseUser.getQuery(); 
    query.whereEqualTo("username", name); 
    try { 
     return query.getFirst(); 
    } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return null; 
} 

Используйте

ParseUser parseUser = getUserByName("userName"); 
if(parseUser !=null){ 

} 

Почему getFirst();

Получает список ParseObjects, которые удовлетворяют этот запрос из источника в пользовательском интерфейсе или основной поток

почему findInBackground();

Получает список ParseObjects, которые удовлетворяют этот запрос из источника в фоновом потоке.

Когда мы используем findInBackground(); вы не можете вернуть любой результат, потому что ваш метод будет возвращать результат без ожидания ответа done()

+0

он работал! Большое спасибо за вашу помощь .... и кстати. Я вижу, что вы используете query.getFirst() вместо query.getFirstInBackground(). Не могли бы вы рассказать мне, какие различия между ними. И как я могу сделать, если я хочу использовать query.getFirstInBackground()? Еще раз спасибо – ThanhTran

+0

принимаем если помогло. !! –

+0

Спасибо за вашу восторженную помощь ...! – ThanhTran

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