2015-12-04 4 views
0

Когда вы просите пользователя войти в мое приложение с помощью входа в систему Facebook, я хочу получить их адрес электронной почты и имя, чтобы создать пользовательскую учетную запись для нашего приложения. Однако, попросив их войти в систему через Facebook и авторизировать наше приложение для имени пользователя и электронной почты, приложение не переходит к фрагменту регистрации и вводит информацию в поля электронной почты и имени.Android-программирование - получение электронной почты и имени пользователя Facebook

В блоке LoginFragment у меня есть этот раздел кода, посвященный извлечению электронной почты и имени пользователя.

mFaceLogin = (LoginButton) v.findViewById(R.id.login_button); 
    mFaceLogin.setReadPermissions(Arrays.asList("email", "public_profile")); 
    mFaceLogin.setFragment(this); 
    mFaceLogin.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      final AccessToken accessToken = loginResult.getAccessToken(); 
      GraphRequest request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() { 
       @Override 
       public void onCompleted(JSONObject user, GraphResponse graphResponse) { 
        if (graphResponse.getError() == null) { 
         ((MyRegisterListener) getActivity()).myStartRegisterFacebook(user.optString("first_name"), user.optString("email")); 
        } 
       } 
      }); 
     } 

     @Override 
     public void onCancel() { 
      Toast.makeText(getActivity(), "fail", Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onError(FacebookException error) { 
      Toast.makeText(getActivity(), "error", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

Метод myStartRegisterFacebook предполагают, чтобы сделать вызов на операцию и к коммутатору на RegisterFragment и отправить имя и адрес электронной почты в поле EditText отображаемых в макете XML-RegisterFragment в.

LoginActivity

@Override 
public void myStartRegisterFacebook(String name, String email) { 
    RegisterFragment registerFragment = new RegisterFragment(); 
    getSupportFragmentManager().beginTransaction().replace(R.id.lr_container, 
      new RegisterFragment()).addToBackStack(null).commit(); 
    registerFragment.updateInformation(name, email); 
} 

RegisterFragment

public void updateInformation(String name, String email) { 
    mFname.setText(name); 
    mEmail.setText(email); 
} 
+0

Возможный дубликат [смог электронную почту и пол и DOB в Facebook входа в систему андроида] (http://stackoverflow.com/questions/32565805/unable-to -get-почта-и-пол-и-д.р.-в-facebook-логин-андроида) –

ответ

0

попытка заменить эту строку:

if (graphResponse.getError() == null) { 
    ((MyRegisterListener) getActivity()).myStartRegisterFacebook(user.optString("first_name"), user.optString("email")); 
} 

с этой линией:

if (graphResponse != null) { 
    JSONObject obj = graphResponse.getJSONObject(); 

    try { 
     ((MyRegisterListener) getActivity()).myStartRegisterFacebook(obj.getString("first_name"), obj.getString("email")); 
    } catch (JSONException e) { 
     Log.e("JSONError:", e.toString()); 
    } 
} 
0

Вы можете использовать GraphAPI, чтобы получить адрес электронной & имя

GraphRequest.newMeRequest(
         loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { 
          @Override 
          public void onCompleted(JSONObject me, GraphResponse response) { 
           if (response.getError() != null) { 
            // handle error 
           } else { 
            String email = me.optString("email"); 
            String id = me.optString("id"); 
            final String userName =me.optString("name"); 

           } 
          } 
       }).executeAsync();