2016-05-06 27 views
0

我對ParseObject有一個奇怪的問題。如何將parseObject.getString()存儲到成員變量中

我有一個用1個成員變量管理數據的類。

String partnerEmail = "[email protected]"; 

我嘗試使用的parseObject檢索電子郵件地址:

object.getString("partnerEmail"); 

,我想將它保存到我的成員變量(partnerEmail),但它從不保存它。 這裏是方法的完整代碼讀取夥伴電子郵件:
內:

public String findEmail() { 
    ParseQuery<ParseObject> query = ParseQuery.getQuery("myTable"); 
    query.whereEqualTo("email", user.getEmail()); 
    query.getFirstInBackground(new GetCallback<ParseObject> () { 
     public void done(ParseObject object, ParseException e) { 
      if (object != null) { 
       partnerEmail = object.getString("partnerEmail"); 
       Log.d("inside", partnerEmail); 
      } 
     } 
    }); 

    Log.d("outside", partnerEmail); 
    return partnerEmail; 
} 
我每次運行該代碼時,我在日誌中看到

[email protected] (這是正確的!)
outisde:[email protected] (這是默認值)

任何想法,爲什麼發生這種情況,或者爲什麼我不能存儲我的成員變量中正確的郵箱?提前致謝!

+0

你誤解了回調的工作原理 - 你有沒有想過還是需要幫助? –

+0

是的,謝謝大家的幫助。我對這一切都很陌生,但我已經知道了這個問題,我所做的一切都是一個處理程序,並等待,直到我得到我的信息,然後做我的事情:) – Bennzy

回答

0

使用break Log.d後的關鍵字(「inside」,partnerEmail);這條線。像這樣的東西

if (object != null) { 
    partnerEmail = object.getString("partnerEmail"); 
    Log.d("inside", partnerEmail); 
    break; 
} 
+0

我不能打破和返回也沒有幫助任何= [ – Bennzy

0

你沒有在你的字符串裏面初始化方法。 嘗試這種方式。

public String findEmail() { 
    final String partnerEmail = null; 
    ParseQuery<ParseObject> query = ParseQuery.getQuery("myTable"); 
    query.whereEqualTo("email", user.getEmail()); 
    query.getFirstInBackground(new GetCallback<ParseObject>() { 
     public void done(ParseObject object, ParseException e) { 
      if (e == null) { 
       // success 
       if (object != null) { 
        partnerEmail = object.getString("partnerEmail"); 
        Log.d("inside", partnerEmail); 
       } 
      } else { 
       // error 
      } 
     } 
    }); 

    Log.d("outside", partnerEmail); 
    return partnerEmail; 
} 

現在檢查inside & outside日誌。

0

這是由於getFirstInBackground是一個nonblocking-api,它包含一個回調函數。在完成線程(請求這個查詢)之後,將完成完成,以便外部日誌將首先打印,然後打印內部日誌。

如果你想要一個blocking-api。

public String findEmail() { 
    ParseQuery<ParseObject> query = ParseQuery.getQuery("myTable"); 
    query.whereEqualTo("email", user.getEmail()); 
    try { 
     ParseObject object = query.getFirst(); 
     partnerEmail = object.getString("partnerEmail"); 
     Log.d("inside", partnerEmail); 
    } catch (ParseException e) { 
     //error 
    } 
    Log.d("outside", partnerEmail); 
    return partnerEmail; 
} 

或者讓回調作爲findEmail中的一個參數,完成後會調用done。

+0

非常感謝!!!我只是使用處理程序和舉行,但這是真棒:) – Bennzy