2017-01-31 3 views
0

Ich schreibe dieses Stück Code, in dem während der Neuanmeldung - Benutzer klickt Login und dann LoginManager kommt heraus zu sagen, um fortzufahren. Sobald Sie darauf klicken, wird der Benutzer zum Diagrammanforderungsteil umgeleitet. In dieser Situation, wenn ich überprüfe, ob Profile.getCurrentProfile(), gibt es null zurück. Während Wenn nach dem Zurückkehren zum Hauptbildschirm wir uns erneut anmelden und die Anforderungsläufe zum zweiten Mal grafisch darstellen, erhalten wir dieses Mal ein Profil. Kann nicht verstehen warum. Vielen Dank!Android Graph Anfrage Facebook - Holen Sie sich das aktuelle Profil

Hier ist der Code:

LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(final LoginResult loginResult) { 

       final AccessToken accessToken = loginResult.getAccessToken(); 
       GraphRequest request = GraphRequest.newMeRequest(
         accessToken, 
         new GraphRequest.GraphJSONObjectCallback() { 
          @Override 
          public void onCompleted(JSONObject object, GraphResponse response) { 
           try { 
            if (null == EpicLoginActivity.this) { 
             return; 
            } 
            if (Profile.getCurrentProfile() != null && object != null && response != null) { 
             profile = Profile.getCurrentProfile(); 
             email = object.optString(getString(R.string.email)); 
             gender = object.optString(getString(R.string.gender)); 
             fbid = profile.getId(); 
             fUserName = profile.getName(); 
             imageUri = profile.getProfilePictureUri(300, 300); 
             String loginType = getString(R.string.facebook); 

             User user = new User(); 
             user.name = fUserName; 
             user.facebookId = fbid; 
             user.phone = object.optString(getString(R.string.phone)); 
             user.email = email; 
             user.loginType = loginType; 
             user.gender = gender; 

             postDetailsFromFb(user); 
            } 
           } catch (Exception e) { 
           } 
          } 
         }); 
       Bundle parameters = new Bundle(); 
       parameters.putString("fields", "id,name,email,picture"); 
       request.setParameters(parameters); 
       request.executeAsync(); 
      } 

Antwort

1

Sie benötigen wir

Voll Code

private FacebookCallback<LoginResult> callback = new FacebookCallback<LoginResult>() { 
    @Override 
    public void onSuccess(LoginResult loginResult) { 
     AccessToken accessToken = loginResult.getAccessToken(); 
     accessTokenTracker = new AccessTokenTracker() { 
      @Override 
      protected void onCurrentAccessTokenChanged(AccessToken accessToken, AccessToken accessToken1) { 

      } 
     }; 
     accessTokenTracker.startTracking(); 

     profileTracker = new ProfileTracker() { 
      @Override 
      protected void onCurrentProfileChanged(Profile profile, Profile profile1) { 

      } 
     }; 
     profileTracker.startTracking(); 

     Profile profile = Profile.getCurrentProfile(); 
     if (profile != null) { 
      //get data here using graph request api 
      // Facebook Email address 
      GraphRequest request = GraphRequest.newMeRequest(
       loginResult.getAccessToken(), 
       new GraphRequest.GraphJSONObjectCallback() { 
        @Override 
        public void onCompleted(
          JSONObject object, 
          GraphResponse response) { 
         Log.v("LoginActivity Response ", response.toString()); 

         try { 
          String Name = object.getString("name"); 
          String FEmail = object.getString("email"); 
          Log.v("Email = ", " " + FEmail); 
          Toast.makeText(getApplicationContext(), "Name " + Name, Toast.LENGTH_LONG).show(); 

         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 
        } 
       }); 
     Bundle parameters = new Bundle(); 
     parameters.putString("fields", "id,name,email,gender, birthday"); 
     request.setParameters(parameters); 
     request.executeAsync(); 
     } 
    } 

    @Override 
    public void onCancel() { 
     LoginManager.getInstance().logOut(); 

    } 

    @Override 
    public void onError(FacebookException e) { 

    } 
}; 
+0

wollen wir also jedes Mal ProfileTokenTracker und AccessTokenTracker in Ihrem onSuccess() Methode setzen verwenden Profildaten erhalten muss Profil-Tracker verwenden, oder? – Debdeep

+0

Ja, das ist die beste Vorgehensweise .. – rafsanahmad007

+0

Da das Profil abrufen asynchron ist. Vielen Dank! – Debdeep

Verwandte Themen