2016-05-06 15 views
0

Ich habe ein seltsames Problem mit ParseObject.Wie parseObject.getString() in eine Membervariable gespeichert wird

Ich habe eine Klasse, die Daten mit 1 Mitgliedsvariablen verwaltet.

String partnerEmail = "[email protected]"; 

Ich versuche, eine E-Mail-Adresse aus parseObject mit abzurufen:

object.getString("partnerEmail"); 

und ich möchte es in meinem Membervariable speichern (partnerEmail), aber es spart es nie. Hier ist voll Code der Methode der Partner E-Mail zu lesen:

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; 
} 

jedes Mal wenn ich diesen Code ausführen Ich sehe in Protokolle:
innen: [email protected] (das ist richtig!)
outisde: [email protected] (das ist die Standardeinstellung)

Irgendwelche Ideen, warum dies geschieht oder warum kann ich nicht die richtige E-Mail in meinem Membervariable speichern? Danke im Voraus!

+0

Sie missverstehen, wie ein Rückruf funktioniert - haben Sie das schon herausgefunden oder brauchen Sie noch Hilfe? –

+0

Ja, danke allen für die Hilfe. Ich bin neu bei all dem, aber ich habe das Problem bereits herausgefunden und alles, was ich gemacht habe, ist ein Handler und warte, bis ich meine Informationen bekomme, dann mach mein Ding :) – Bennzy

Antwort

0

Verwenden break Schlüsselwort nach Log.d ("inside", PartnerEmail); diese Linie. So etwas wie dieses

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

Ich kann nicht brechen und zurückkehren hilft auch nicht = [ – Bennzy

0

Sie haben keine Initialisierung innerhalb der Methode Ihre Zeichenfolge. versuchen Sie auf diese Weise wie.

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; 
} 

jetzt Ihre inside & outside Protokoll überprüfen.

0

Dies liegt an getFirstInBackground ist eine nonblocking-API, die eine Callback-Funktion enthielt. Fertig wird aufgerufen, nachdem der Thread (Anfrage für diese Abfrage) beendet wurde, so dass zuerst das externe Protokoll und dann das interne Protokoll gedruckt wird.

Wenn Sie eine Blockierung-API wollen.

oder Callback als Argument in findEmail lassen, done wird aufgerufen, wenn es fertig ist.

+0

Danke vielmals!!! Ich habe nur Handler benutzt und halte, aber das ist genial :) – Bennzy

Verwandte Themen