2016-04-16 13 views
0

Hallo allerseits Ich benutze Xamarin.Forms, um eine Anwendung zu erstellen. Ich konnte einen Facebook-Login erstellen und die Benutzer-ID abrufen. Ich versuche jetzt die Freundesliste des Benutzers zu bekommen. Ich verstand, dass nur Benutzer, die die App akzeptiert haben gezeigt werden können, aber ich kann nicht das man sehen, wer in meiner app identifiziert (Ich habe einen Freund als Testbenutzer) Hier ist mein Code:Xamarin.forms/Android Facebook Freunde erhalten

private void getFriends() { 
     FacebookClient fb = new FacebookClient (App.Token); 

     fb.GetTaskAsync ("me/friends").ContinueWith (t => { 
      try { 
       var result = (IDictionary<string, object>)t.Result; 
       var data = (IList<object>)result ["data"]; 

       foreach (IDictionary<string, object> friend in data) { 
        App.addFriendToList ((string)friend ["name"], (string)friend["id"]); 
       } 
      } catch { 
       App.addFriendToList ("No Friends Using imin", "0000"); 
      } 
     }); 
    } 

Der Code ist für Android . Der Code ist vom Xamarin Facebook SDK inspiriert (um nicht zu sagen kopiert). Also sollte es funktionieren. Es funktioniert, aber die Liste, die Freund anzeigen soll, bleibt leer (beachten Sie, dass ich keine Fehler erhalte).

Danke für die Antworten!

+0

ist das Problem, dass Sie die Daten erhalten, aber die Benutzeroberfläche zeigt es nicht an? Oder dass Sie die Daten überhaupt nicht bekommen? Das sind zwei verschiedene Probleme, und Sie müssen herausfinden, welche Sie lösen müssen. – Jason

+0

Ich habe graben und vielleicht meine Benutzeroberfläche nicht aktualisieren, werde ich versuchen, Phillipe Antwort direkt unter. –

Antwort

0

Der Rückruf in ContinueWith läuft tatsächlich auf einem anderen Synchronisationskontext. Die Benutzeroberfläche wird wahrscheinlich nicht aktualisiert. Versuchen Sie, dies zu tun:

private void getFriends() { 
    FacebookClient fb = new FacebookClient (App.Token); 

    // There call for "Result" here will wait for the task to complete before returning. 
    var result = (IDictionary<string, object>)fb.GetTaskAsync ("me/friends").Result; 
    var data = (IList<object>)result ["data"]; 

    foreach (IDictionary<string, object> friend in data) { 
     App.addFriendToList ((string)friend ["name"], (string)friend["id"]); 
    } 
} 

Bitte nicht, dass dies der UI-Thread blockieren und die Anwendung wird während des Get Anruf nicht reagiert bleiben. So etwas wie dies wäre vorzuziehen:

private async Task getFriends() { 
    FacebookClient fb = new FacebookClient (App.Token); 

    //Here the call to ConfigureAsync(true) will force the synchronization context back to the one before the call (the UI thread in this case) 
    var result = (IDictionary<string, object>)(await fb.GetTaskAsync ("me/friends").ConfigureAsync(true)); 
    var data = (IList<object>)result ["data"]; 

    foreach (IDictionary<string, object> friend in data) { 
     App.addFriendToList ((string)friend ["name"], (string)friend["id"]); 
    } 
} 
+0

Danke für die Antwort, ich denke effektiv, dass meine UI nicht aktualisiert: Ich benutze eine Listview, um eine Liste von Objekt Freund mit Name und ID gebaut anzuzeigen. Zeigt die Listenansicht den gesamten Inhalt der Liste an, aus der sie zu jeder Zeit stammt, oder müssen Sie aktualisieren und wiederholen (ListView.ItemsSource = IhreListe), damit die Anzeige aktualisiert wird? Wenn das der Fall ist, muss ich eine Problemumgehung finden. –

+0

Ich bin mit der Android-Benutzeroberfläche nicht vertraut, aber ich sehe nicht, warum Sie die Quelle neu zuweisen müssen, wenn sich die Referenz nicht ändert ... Es gibt wahrscheinlich einen Weg um das Redraw oder so etwas zu erzwingen! –

+0

Nun, wenn es aus einer Liste <> Nein ist, können Sie die Quelle nicht ändern, die eine Ausnahme auslöst, ich musste eine ObservableCollections <> verwenden, um die Quelle ändern zu können. –

0

Ordnung Ich habe gerade einen dummen Fehler, haben die Liste nicht init ich verwendet, um die Freunde zu speichern, sollte zweimal geprüft. Mein Anfangscode funktioniert damit gut.

Verwandte Themen