2016-05-06 5 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

を使用してください。キーワードは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がノンブロッキングAPIであり、コールバック関数が含まれているためです。スレッド(このクエリの要求)が終了した後にDoneが呼び出され、outside-logが最初に出力され、次にinside-logが出力されます。

ブロッキング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

関連する問題