Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Facebook onCompleted Email java.lang.NullPointerException

Puedo conseguir todas esas cosas según lo demostrado en mi código abajo, pero no poder recuperar el email del perfil de usuario.

¿Qué puedo hacer por esto?

  • ¿Alinear los iconos de la barra de herramientas de derecha a izquierda?
  • Obtención de la instancia Fragment actual en el viewpager
  • Uso de mi propia biblioteca compartida precompuesta en un proyecto de Android NDK
  • ¿Puedo replicar entre CouchBase en Android y Couch DB corriendo en Linux?
  • Nueva publicación "Autenticación con Google Play Services", Problemas con la obtención de un token a través de GoogleAuthUtil.getToken
  • Reemplazar el diseño de la barra de herramientas de acuerdo con el fragmento visualizado
  • Cualquier tipo de ayuda será apreciada.

    Anteriormente estaba usando esta fuente para obtener detalles del usuario de Facebook y estaba buscando datos (incluido el correo electrónico) sin ningún problema:

    public class MainActivity extends Activity { private Session.StatusCallback sessionStatusCallback; private Session currentSession; private Button login; private Button logout; private Button publishButton; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textView); // create instace for sessionStatusCallback sessionStatusCallback = new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { onSessionStateChange(session, state, exception); } }; login = (Button) findViewById(R.id.loginButton); login.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { connectToFB(); } }); logout = (Button) findViewById(R.id.logoutButton); logout.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (currentSession != null) { currentSession.closeAndClearTokenInformation(); ... } } }); // publish button publishButton = (Button) findViewById(R.id.publishButton); publishButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { publishStory(); } }); } public void connectToFB() { List<String> permissions = new ArrayList<String>(); permissions.add("publish_actions"); currentSession = new Session.Builder(this).build(); currentSession.addCallback(sessionStatusCallback); Session.OpenRequest openRequest = new Session.OpenRequest( MainActivity.this); openRequest.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO); openRequest.setRequestCode(Session.DEFAULT_AUTHORIZE_ACTIVITY_CODE); openRequest.setPermissions(permissions); currentSession.openForPublish(openRequest); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (currentSession != null) { currentSession .onActivityResult(this, requestCode, resultCode, data); } } private void onSessionStateChange(Session session, SessionState state, Exception exception) { if (session != currentSession) { return; } if (state.isOpened()) { // Log in just happened. Toast.makeText(getApplicationContext(), "session opened", Toast.LENGTH_SHORT).show(); Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { String fbId = user.getId(); String fbName = user.getName(); String gender = user.asMap().get("gender").toString(); String email = user.asMap().get("email").toString(); String first = user.asMap().get("first_name").toString(); String last = user.asMap().get("last_name").toString(); textView.setText("Id: " + fbId + ", Name: " + fbName + ", Gender: " + gender + ", EmailID: " + email + ", First: " + first + ", Last: " + last); } }); } else if (state.isClosed()) { // Log out just happened. Update the UI. Toast.makeText(getApplicationContext(), "session closed", Toast.LENGTH_SHORT).show(); } } public void publishStory() { .... } } 

    Y ahora estoy usando el mismo código en uno de mis proyectos, pero siempre recibiendo:

     E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.NullPointerException at comMainActivity$5.onCompleted(MainActivity.java:262) at com.facebook.Request$1.onCompleted(Request.java:303) at com.facebook.Request$4.run(Request.java:1726) at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4921) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) 

    En esta línea, estoy recibiendo NPE :

      String email = user.asMap().get("email").toString(); 

    Código:

     public class MainActivity extends Activity { Button btnFBLogin, btnGPLogin; private Session.StatusCallback sessionStatusCallback; private Session currentSession; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.screen_layout); sessionStatusCallback = new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { onSessionStateChange(session, state, exception); } }; btnFBLogin = (Button) findViewById(R.id.loginFB); btnFBLogin.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub connectToFB(); } }); } public void connectToFB() { List<String> permissions = new ArrayList<String>(); permissions.add("publish_actions"); currentSession = new Session.Builder(this).build(); currentSession.addCallback(sessionStatusCallback); Session.OpenRequest openRequest = new Session.OpenRequest( MainActivity.this); openRequest.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO); openRequest.setRequestCode(Session.DEFAULT_AUTHORIZE_ACTIVITY_CODE); openRequest.setPermissions(permissions); currentSession.openForPublish(openRequest); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (currentSession != null) { currentSession .onActivityResult(this, requestCode, resultCode, data); } } private void onSessionStateChange(Session session, SessionState state, Exception exception) { if (session != currentSession) { return; } if (state.isOpened()) { // Log in just happened. Toast.makeText(getApplicationContext(), "session opened", Toast.LENGTH_SHORT).show(); Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { String fbId = user.getId(); String fbName = user.getName(); String gender = user.asMap().get("gender").toString(); String email = user.asMap().get("email").toString(); String first = user.asMap().get("first_name").toString(); String last = user.asMap().get("last_name").toString(); Toast.makeText(MainActivity.this, "EmailId:- "+email, Toast.LENGTH_LONG).show(); } }); } else if (state.isClosed()) { // Log out just happened. Update the UI. Toast.makeText(getApplicationContext(), "session closed", Toast.LENGTH_SHORT).show(); } } } 

    ¿Cuál podría ser la razón? ¿Por qué está sucediendo?

  • Android: las carpetas de destino res para depurar en eclipse
  • ¿Cómo establecer la fecha máxima en el diálogo datepicker en android?
  • Cámara de Android ICS emulador
  • Eclipse - parseSdkContent falló el error - no reconoce archivos XML
  • Programmatic haga clic en Android WebView
  • Android MediaCodec decodificar marco h264 crudo
  • 2 Solutions collect form web for “Facebook onCompleted Email java.lang.NullPointerException”

    En algún momento podría suceder que el usuario no establezca su ID de correo electrónico en su perfil que usted está recibiendo en su Facebook de acceso a través de Android para que arroja error como la excepción de puntero nulo.

    Por lo que debe tener que comprobar antes de utilizar la variable de correo electrónico después de buscar desde el inicio de sesión que es nulo o no Tales como:

     String email =""; if(user.asMap().get("email") != null){ email = user.asMap().get("email").toString(); } 

    Debe agregar "correo electrónico" a la lista de permisos que necesita, de lo contrario el correo electrónico siempre será nulo. No sé qué versión de la sdk que está utilizando. Con el último usted puede escribir:

     Collection<String> mPermissions = new ArrayList<>(); mPermissions.add("email"); LoginManager mLoginManager = LoginManager.getInstance(); CallbackManager mCallbackManager = CallbackManager.Factory.create(); FbCallback fbCallback = new FbCallback(this); mLoginManager.registerCallback(mCallbackManager, fbCallback); [...] mLoginManager.logInWithReadPermissions(this, mPermissions); 

    Por cierto … recuerde que el usuario puede revocar el permiso o no puede concederlo durante el inicio de sesión.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.