我可以得到所有这些东西,如下面的代码所示,但无法从用户@R_301_382@中检索电子邮件.
我该怎么办?
任何一种帮助将不胜感激.
早些时候,我使用这个来源获取Facebook用户的详细信息,并且没有任何麻烦地获取数据(包括电子邮件):
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,data); } } private void onSessionStateChange(Session session,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() { .... } }
现在我在我的一个项目中使用相同的代码,但总是得到:
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)
在这条线上,我得到了NPE:
String email = user.asMap().get("email").toString();
码:
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,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,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(),Toast.LENGTH_SHORT).show(); } } }
可能是什么原因?为什么它的发生?