2014-04-07 2 views
0

Я работаю на Facebook интеграции в моем приложении:Виртуальный адрес Facebook пользователя

Но что-то не так, и адрес электронной почты пользователя всегда возвращает нулевое значение:

Вот мой код:

@Override 
public void onCreate(Bundle savedInstanceState) { 
.. 
.. 
     //initiate session 
     Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS); 
     Session session = Session.getActiveSession(); 
     if (session == null) { 
      if (savedInstanceState != null) { 
       session = Session.restoreSession(this, null, statusCallback, savedInstanceState); 
      } 
      if (session == null) { 
       session = new Session(this); 
      } 
      Session.setActiveSession(session); 
      if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) { 
       Session.OpenRequest op = new Session.OpenRequest(this); 
      op.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO); 
      op.setCallback(null); 

      List<String> permissions = new ArrayList<String>(); 
      permissions.add("publish_stream"); 
      permissions.add("user_likes"); 
      permissions.add("email"); 
      permissions.add("user_birthday"); 
      op.setPermissions(permissions); 
      Session.setActiveSession(session); 
      session.openForPublish(op); 
     } 
    } 
} 

@Override 
public void onStart() { 
    Logger.d(TAG,"onStart"); 
    super.onStart(); 
    Session.getActiveSession().addCallback(statusCallback); 
} 

@Override 
public void onStop() { 
    Logger.d(TAG,"onStop"); 
    super.onStop(); 
    Session.getActiveSession().removeCallback(statusCallback); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Logger.d(TAG,"onActivityResult"); 
    super.onActivityResult(requestCode, resultCode, data); 
    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    Logger.d(TAG,"onSaveInstanceState"); 
    super.onSaveInstanceState(outState); 
    Session session = Session.getActiveSession(); 
    Session.saveSession(session, outState); 
} 


private void getUserDetails(Session session) { 
    Logger.d(TAG,"getUserDetails"); 
    Request request = Request.newMeRequest(session, new Request.GraphUserCallback() { 
     @Override 
     public void onCompleted(GraphUser user, Response response) { 
      Log.d(TAG,"newMeRequest:onCompleted"); 
      if (user != null) { 
       fbCurrentUser = user; 
       Log.d(TAG,"Already logged-in : "+ user.getId()); 
       Log.d(TAG,"User First Name: "+ user.getFirstName()); 
       Log.d(TAG, "User Email: " + user.getProperty("email")); 
       Log.e(TAG, "response: " + response); 
       Log.e(TAG, "user: " + user.toString()); 
       //check if new user [get his friends list] 
       getFriendsList(); 
      } else { 
       Log.e(TAG,"No User Found"); 
      } 
     } 

    }); 
    Request.executeBatchAsync(request); 
} 

Пожалуйста, помогите! Спасибо заранее!

+0

попытка ниже решения и дайте мне знать, что происходит? @username_AB – InnocentKiller

+0

Проверьте настройки приложения: https://www.facebook.com/settings?tab=applications, если вы предоставили разрешение от emai –

+0

Да, я дал – AabidMulani

ответ

0

Попробуйте для получения электронной почты,

String email = user.asMap().get("email").toString(); 
Log.d(TAG, "User Email: " + email); 
TextView mEmail = (TextView) findViewById(R.id.textView1); 
mEmail.setText(email); 

или же дать попробовать на ниже код

Log.d(TAG, "User Email: " + user.getProperty("email").toString()); 

просто добавить toString() на конец Вход для дополнительной контрольной проверки этого link

С этот выше код кода я успешно могу получить электронное письмо пользователя.

Редактировать

Session.openActiveSession(this, true, new Session.StatusCallback() { 

      @Override 
      public void call(Session session, SessionState state, 
        Exception exception) { 
       if (session.isOpened()) { 
        // make request to the /me API 
        Request.executeMeRequestAsync(session, 
          new Request.GraphUserCallback() { 
           @Override 
           public void onCompleted(GraphUser user, 
             Response response) { 
            if (user != null) { 
             String email = user.asMap() 
               .get("email").toString(); 
             mEmail.setText(email); 
            } 
           } 
          }); 
       } else { 
        Toast.makeText(getApplicationContext(), "Error...", 
          Toast.LENGTH_LONG); 
       } 
      } 
     }); 
+0

Не работает, дает нулевой указатель! Пожалуйста, перепроверьте, если мой опубликованный код верен. – AabidMulani

+0

@username_AB, где именно оно дает исключение nullpointer. – InnocentKiller

+0

String email = user.asMap(). Get ("email"). ToString(); – AabidMulani

0

Проверьте реакцию дает какую-либо ошибку или нет, то

JSONObject json = com.facebook.android.Util.parseJson(response); 
    if(json != null){ 
     final String id = json.getString("id"); 
    final String email = json.getString("email"); 
    } 
+0

Я напечатал весь ответ, исходящий с сервера facebook; у него нет поля с именем электронной почты – AabidMulani