2015-12-20 43 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