2012-12-21 12 views
6

Pracuję nad aplikacją, która potrzebuje dat urodzenia wszystkich znajomych. Czy niektóre ciała mogą udostępniać kod, jak uzyskać daty urodzenia wszystkich znajomych korzystających z interfejsu API wykresów. używam następujący kod:Android: Jak zdobyć daty urodzenia przyjaciół z kalendarza na Facebooku za pomocą Graph API

// start Facebook Login 
    Session.openActiveSession(this, true, new Session.StatusCallback() { 

     // callback when session changes state 
     @Override 
     public void call(Session session, SessionState state, Exception exception) { 
     if (session.isOpened()) { 

      // make request to the 
      Request.executeMyFriendsRequestAsync(session, new Request.GraphUserListCallback() { 

       @Override 
       public void onCompleted(List<GraphUser> users, Response response) { 
        //Log.d("AL",""+users.size() + response.toString()); 
        for (int i=0;i<users.size();i++){ 
         Log.d("AL",""+users.get(i).toString()); 
         welcome.setText("Done"); 
        } 

       } 
      }); 
     } 
     } 
    }); 

I to wraca Tylko znajomi nazwę i identyfikator tylko. Gdzie muszę ustawić uprawnienia, aby dostać urodziny przyjaciół? Jestem nowy w Facebooku SDK. I za pomocą SDK v3.

graph api wraca następujące json spowodować

{Response: responseCode: 200, graphObject: GraphObject{graphObjectClass=GraphObject, state={"data":[{"id":"1580811776","name":"Jamal Abdul Nasir"},{"id":"1610349118","name":"Ahmed Nawaz"}],"paging":{"next":"https:\/\/graph.facebook.com\/100004790803061\/friends?format=json&access_token=AAABtTr8g5U4BANiJdCiBFxQeg0l1eqYYzmSWVM8G1UlyAhTtUrAsoEZAgU19dECXTE2nw7pHIz8bDb7OJGM4wAwzusOVZAQN8yaiYVsQZDZD&limit=5000&offset=5000&__after_id=1610349118"}}}, error: null, isFromCache:false} 

który nie ma urodziny.

+0

Interfejs api zwraca wynik json. Sprawdź, jak uzyskać dane z json. – SnareChops

+0

Hmm ... Nie jestem pewien. Spróbuj przejrzeć dokumentację (https://developers.facebook.com/docs/reference/api/) – SnareChops

+0

W Eksploratorze interfejsu Graph Graph mam urodziny. https://developers.facebook.com/tools/explorer 514418319? Fields = friends.fields (nazwisko, urodziny, identyfikator) Czy dowolne ciało może mi powiedzieć Jak zrobić kod powyżej żądania api wykresu? –

Odpowiedz

13

pierwsze zdefiniować oddzwonienia, gdzie dostaniesz przyjaciół i informacje urodzinowy, jeśli uwierzytelniona:

Session.StatusCallback statusCallback = new Session.StatusCallback() { 

    // callback when session changes state 
    @Override 
    public void call(Session session, SessionState state, Exception exception) { 
    if (session.isOpened()) { 
     // Private method, to be defined 
     makeFriendsRequest(); 
    } 
    } 

}; 

Następnie można otworzyć sesję i przejść we wniosku konieczne „friends_birthday” uprawnienia:

Session session = new Session(this); 
session.openForRead(new Session.OpenRequest(this) 
         .setCallback(statusCallback) 
         .setPermissions(Arrays.asList("friends_birthday"))); 

Wreszcie, oto metoda post-autoryzacji można użyć, aby uzyskać informacje o znajomych, w tym urodziny:

private void makeFriendsRequest() { 
    Request myFriendsRequest = Request.newMyFriendsRequest(Session.getActiveSession(), 
      new Request.GraphUserListCallback() { 

     @Override 
     public void onCompleted(List<GraphUser> users, Response response) { 
      if (response.getError() == null) { 
       // Handle response 
      } 

     } 

    }); 
    // Add birthday to the list of info to get. 
    Bundle requestParams = myFriendsRequest.getParameters(); 
    requestParams.putString("fields", "name,birthday"); 
    myFriendsRequest.setParameters(requestParams); 
    myFriendsRequest.executeAsync(); 
} 

Sprawdź również aplikację SessionLoginSample, dołączoną do pakietu SDK, jeśli szukasz różnych sposobów na zaimplementowanie logowania na Facebooku.

+0

Nie zapominaj, że jeśli chcesz poprawnie zachować swój stan sesji, nie zapomnij o dwóch rzeczach: ** 1. ** Dodaj 'Session.setActiveSession (session);' after 'Session session = new Session (FindFriendsActivity.this) ; 'linia i ** 2. ** Zastępuje działanie' onActivityResult() 'z czymś podobnym do tego: ' @Override public void onActivityResult (int requestCode, int resultCode, dane intencji) { super.onActivityResult (requestCode, resultCode, dane); Sesja sesji = sesja.getActiveSession(); if (session! = Null) { session.onActivityResult (this, requestCode, resultCode, data); } } ' –

0

Przypuszczam spróbować wykorzystać to:

URL url = "http://YOUR_QUERY_URL_WITH_PARAMS"; 
InputStream is = null; 
URLConnection connection = url.openConnection(); 
String line; 
StringBuilder builder = new StringBuilder(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(      connection.getInputStream())); 
while ((line = reader.readLine()) != null) 
{ 
    builder.append(line); 
} 
String jSONString = builder.toString(); 
JSONObject jSONObject = new JSONObject(jSONString); 

następnie podjąć dane otrzymane i wyświetlić go.

Uwaga: Nie testowałem tego kodu, nie ma android urządzenie do testowania na więcej, ale powinno Ci wskazał w dobrym kierunku.

+0

@ahmedNawaz miałeś zamiar opublikować kod w swoim komentarzu? Jeśli tak, a jeśli jest więcej niż jedna lub dwie linie, możesz dodać ją do swojego pytania, edytując i wpisując tutaj komentarz, mówiąc mi, żebym na to spojrzał. – SnareChops

Powiązane problemy