Facebook的SDK 3.7的Android请求电子邮件的权限 [英] Facebook SDK 3.7 for Android request email permission
问题描述
我使用Facebook的SDK为Android允许用户注册和使用的应用程序。我想获得有关用户喜欢的用户名和电子邮件的一些基本信息。无论如何,我有问题,因为我得到试图获取用户的电子邮件时,空指针异常。
字符串email = user.getProperty(电子邮件)的toString()。
我假设我得到这个错误,因为我并没有要求对电子邮件的权限。我该怎么办呢?
下面是在全code
公共类RegisterActivity扩展ActionBarActivity {
按钮btnFacebook;
@覆盖
保护无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_register);
getSupportActionBar()隐藏()。
btnFacebook =(按钮)findViewById(R.id.btn_facebook);
btnFacebook.setOnClickListener(新OnClickListener(){
@覆盖
公共无效的onClick(查看为arg0){
Log.d(脸谱,Prije sesije);
//开始的Facebook登录
Session.openActiveSession(RegisterActivity.this,真,新Session.StatusCallback(){
//回调时,会话状态变化
@燮pressWarnings(德precation)
@覆盖
公共无效呼叫(会话的会话,SessionState会的状态,
例外的例外){
Log.d(脸谱,U称之为);
如果(session.isOpened()){
Log.d(脸谱,AKO济sesija otvorena);
//使请求/ ME API
Request.executeMeRequestAsync(会话,新Request.GraphUserCallback(){
@覆盖
公共无效onCompleted(GraphUser用户,响应响应){
Log.d(脸谱,onCompleted);
如果(用户!= NULL){
Log.d(脸谱,用户razlicit外径为空);
字符串email = user.getProperty(电子邮件)的toString()。
Toast.makeText(getApplicationContext(),输入法+ user.getUsername()。的toString()+电子邮件+电子邮件,
Toast.LENGTH_SHORT).show();
字符串userid = user.getId();
//新DownloadImageTask(ivProfile).execute(http://graph.facebook.com/+用户id +?/图像类型=大);
Log.d(ID,用户id);
}
Log.d(ID,user.getId());
}
});
}
Log.d(脸谱,nijeüsesisji);
}
});
}
});
}
@覆盖
公共无效onActivityResult(INT申请code,INT结果code,意图数据){
super.onActivityResult(要求code,因此code,数据);
Session.getActiveSession()onActivityResult(这一点,要求code,因此code,数据)。
}
获得第一的权限
私有静态最后的名单,其中,字符串> PERMISSIONS = Arrays.asList(
电子邮件,user_location);
的方法获取用户信息
Session.openActiveSession(RegisterActivity.this,真,新Session.StatusCallback(){
//回调时,会话状态变化
@覆盖
公共无效呼叫(会话的会话,SessionState会的状态,
例外的例外){
/ *
* Session.getActiveSession()。onActivityResult(activity1,64206,
* -1,activity1.getIntent());
* /
如果(session.isOpened()){
名单<字符串>权限= session.getPermissions();
如果(!isSubsetOf(权限,权限)){
Session.NewPermissionsRequest newPermissionsRequest =新Session.NewPermissionsRequest(
RegisterActivity.this,权限);
session.requestNewReadPermissions(newPermissionsRequest);
返回;
}
//使请求/ ME API
Request.newMeRequest(会话,新GraphUserCallback(){
@覆盖
公共无效onCompleted(GraphUser用户,响应响应){
// TODO自动生成方法存根
Log.d(,+用户);
尝试 {
名称= user.getName();
电子邮件= user.getProperty(电子邮件)的toString()。
(。user.getLocation()的getProperty(姓名)的toString())的位置=;
}赶上(例外五){
// TODO自动生成的catch块
e.printStackTrace();
}
}
})executeAsync()。
}
}
});
isSubsetof法
私人布尔isSubsetOf(集<字符串>的子集,
收藏<字符串>超){
对于(字符串字符串:子集){
如果(!superset.contains(串)){
返回false;
}
}
返回true;
}
把这个code中的 onActivityResult
@覆盖
公共无效onActivityResult(INT申请code,INT结果code,意图数据){
super.onActivityResult(要求code,因此code,数据);
Log.d(活动结果,+请求code ++结果code ++ data.toString());
Session.getActiveSession()。onActivityResult(这一点,要求code,
因此code,数据);
}
将网络在清单的权限
<使用-权限的Android:名称=android.permission.INTERNET对/>
声明 Facebook的登录活动在清单
<元数据
机器人:名称=com.facebook.sdk.ApplicationId
机器人:值=@字符串/ APP_ID/>
I am using Facebook SDK for Android to allow users to register and use app. I want to get some basic info about user like user name and email. Anyway, I have problem because I get null pointer exception when trying to get user email.
String email = user.getProperty("email").toString();
I assuming that I get this error because I did not request for email permission. How I can do that?
Here is the full code:
public class RegisterActivity extends ActionBarActivity{
Button btnFacebook;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
getSupportActionBar().hide();
btnFacebook = (Button) findViewById(R.id.btn_facebook);
btnFacebook.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Log.d("FACEBOOK", "Prije sesije");
// start Facebook Login
Session.openActiveSession(RegisterActivity.this, true, new Session.StatusCallback() {
// callback when session changes state
@SuppressWarnings("deprecation")
@Override
public void call(Session session, SessionState state,
Exception exception) {
Log.d("FACEBOOK", "U call");
if(session.isOpened()){
Log.d("FACEBOOK", "ako je sesija otvorena");
// make request to the /me API
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
Log.d("FACEBOOK", "onCompleted");
if(user != null){
Log.d("FACEBOOK", "user razlicit od null");
String email = user.getProperty("email").toString();
Toast.makeText(getApplicationContext(), "Ime "+user.getUsername().toString()+ "Email "+ email ,
Toast.LENGTH_SHORT).show();
String userId = user.getId();
//new DownloadImageTask(ivProfile).execute("http://graph.facebook.com/"+userId+"/picture?type=large");
Log.d("ID", userId);
}
Log.d("ID", user.getId());
}
});
}
Log.d("FACEBOOK", "nije u sesisji");
}
});
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
Get the permissions first
private static final List<String> PERMISSIONS = Arrays.asList(
"email","user_location");
The Method for getting the user information
Session.openActiveSession(RegisterActivity.this, true, new Session.StatusCallback() {
// callback when session changes state
@Override
public void call(Session session, SessionState state,
Exception exception) {
/*
* Session.getActiveSession().onActivityResult(activity1,64206,
* -1,activity1.getIntent());
*/
if (session.isOpened()) {
List<String> permissions = session.getPermissions();
if (!isSubsetOf(PERMISSIONS, permissions)) {
Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(
RegisterActivity.this, PERMISSIONS);
session.requestNewReadPermissions(newPermissionsRequest);
return;
}
// make request to the /me API
Request.newMeRequest(session, new GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
// TODO Auto-generated method stub
Log.d("",""+user);
try {
name=user.getName();
email=user.getProperty("email").toString();
location=(user.getLocation().getProperty("name").toString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).executeAsync();
}
}
});
isSubsetof method
private boolean isSubsetOf(Collection<String> subset,
Collection<String> superset) {
for (String string : subset) {
if (!superset.contains(string)) {
return false;
}
}
return true;
}
put this code in onActivityResult
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d("Activity result"," "+requestCode+" "+resultCode+" "+data.toString());
Session.getActiveSession().onActivityResult(this, requestCode,
resultCode, data);
}
Put Internet permission in Manifest
<uses-permission android:name="android.permission.INTERNET" />
Declare Facebook Login Activity in manifest
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/app_id" />
这篇关于Facebook的SDK 3.7的Android请求电子邮件的权限的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!