2015-05-22 28 views
10

Aşağıdakileri kodumda gösterildiği gibi alabiliyorum, ancak kullanıcı profilinden e-posta alamıyorum.Facebook onCompleted Email java.lang.NullPointerException

Bunun için ne yapabilirim?

Her türlü yardım memnuniyetle karşılanacaktır.

başlarında

Ben Facebook kullanıcısı ayrıntılarını almak için bu kaynağı kullanarak ve herhangi bir sorun olmadan (Email dahil) verileri getirme edildi:

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() { 
     .... 
    } 

} 

Ve şimdi Projemin birinde aynı kodu kullanıyorum, ama her zaman alma:

String email = user.asMap().get("email").toString(); 
01: Bu hatta

E/AndroidRuntime﹕ FATAL EXCEPTION: main 
java.lang.NullPointerException 
at c.o.m.MainActivity$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) 

, ben NPE alıyorum

Kodu:

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(); 
     } 
    } 
} 

Bunun nedeni ne olabilir? Neden böyle oluyor?

+0

Ne kadar kötüsü .. sorun ne? – Sun

+0

Log.i ("fb", "fb user:" + user.toString()); Bunu neden yapıyorsun ? oturum var mı? –

+1

@Sun: Muhtemelen 'toString()' 'null' üzerinde çağırarak' 'string e-postayı = user.asMap() 'ı kullanmayı deneyin. Get (" email ")' –

cevap

0

Bazen Kullanıcı E-posta Kimliğini kendi Profiline ayarlamamış olabilir, bu sizin Facebook'unuza giriş yapıyorsunuzdur Android ile giriş yapınız, böylece Null Pointer Exception gibi bir Hata atar. Sen sen izinlerin listesine "e-posta" eklemem gerekiyor

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

önceki örneğimde yazdığım gibi ben de e-posta alıyordum ve ben – Sun

+0

Ya Sure'a giriş yapmak için aynı hesabı kullanıyorum ama yukarıdaki kodunuzu kontrol ettim ve posta kimliğinin mevcut olup olmadığını kontrol etmeyi özledin. Yani Şimdi bu kodu kullanarak, yukarıdaki önerilen soru satırınızda boş gösterici istisnasıyla ilgili herhangi bir sorun bulunmuyor: String email = user.asMap(). Get ("email"). ToString(); –

0

: Mesela

Yani Bunu null veya olmadığını Giriş gelen getirilirken sonra E-posta Değişken kullanmadan önce kontrol etmek olmalıdır gerektiren, aksi takdirde e-posta her zaman boş olacaktır. Kullandığınız SDK sürümünün ne olduğunu bilmiyorum. ... Bu arada

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); 

kullanıcı izni iptal edebilir veya giriş sırasında veremez unutmayın: sonuncusu ile yazabilirsiniz.

İlgili konular