2015-12-20 41 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; 
} 

它编译错误,并说:“变量'用户'需要声明为最终”。但是,如果我宣布:

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();

检索满足从UI或主线程 源此查询ParseObjects列表

为什么findInBackground();

检索满足从后台线程的 源此查询ParseObjects的列表。

当我们使用findInBackground();你不能返回任何结果,因为你的方法将返回的结果,而不done()响应

+0

它的工作等待!非常感谢您的帮助....顺便一提。我看到你正在使用query.getFirst()而不是query.getFirstInBackground()。你能告诉我他们之间有什么区别吗?我怎么能如果我想使用query.getFirstInBackground()?再次感谢 – ThanhTran

+0

接受如果帮助。 –

+0

谢谢你的热心帮助......! – ThanhTran