如何获取用户的个人资料信息的Facebook的Andr​​oid [英] How get user profile information Facebook Android

查看:206
本文介绍了如何获取用户的个人资料信息的Facebook的Andr​​oid的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图获取用户的个人资料信息的Facebook。开始加载,我点击确认权限发送我的个人资料,再继续加载但最终得到的空字段。

我是什么做错了吗?请帮助。

 公共类SettingsApps延伸活动{
公共最后弦乐API_KEY =492429660800628;
商标=新的Facebook(API_KEY);

@覆盖
保护无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.settings);

米preFS = GET preferences(MODE_PRIVATE);
字符串acces_token = M prefs.getString(acces_token,NULL);
长过期= M prefs.getLong(acces_expires,0);

如果(Session.getActiveSession()==空|| Session.getActiveSession()。isClosed返()){
    Session.openActiveSession(这一点,真,新StatusCallback(){
        公共无效呼叫(会话的会话,SessionState会状态,例外的例外){
            的System.out.println(状态=+状态);

            如果(session.isOpened()){
                的System.out.println(令牌=+ session.getAccessToken());
                请求请求= Request.newMeRequest(会话,新GraphUserCallback(){
                            公共无效onCompleted(GraphUser用户,响应响应){

                                如果(用户!= NULL){
                                    TextView的idText =(TextView中)findViewById(R.id.id);
                                    TextView的first_nameText =(TextView中)findViewById(R.id.first_name);
                                    TextView的last_nameText =(TextView中)findViewById(R.id.last_name);
                                    idText.setText(user.getId());
                                    first_nameText.setText(user.getFirstName());
                                    last_nameText.setText(user.getLastName());
                                }
                                如果(响应!= NULL){
                                    的System.out.println(响应=+响应);
                                    Toast.makeText(SettingsApps.this,response.toString(),
                                            Toast.LENGTH_LONG).show();
                                }
                            }
                        });
                Request.executeBatchAsync(要求);
            }
            如果(例外!= NULL){
                的System.out.println(有些事遭遇不测!);
                exception.printStackTrace();
            }
        }
    });
}
}
@覆盖
公共无效onActivityResult(INT申请code,INT结果code,意图数据){
  super.onActivityResult(要求code,因此code,数据);
  facebook.authorizeCallback(要求code,因此code,数据);
  }
}
 

LogCat中

  669:信息/ ActivityManager(72):开始:意向{CMP = com.fitness_sport_betta / .SettingsApps}从PID 847
899:信息/ ActivityManager(72):开始:意向{行动= SSO_WITH_FALLBACK CMP = com.fitness_sport_betta / com.facebook.LoginActivity(有演员)}从PID 847
949:信息/的System.out(847):状态=开幕
539:信息/ ActivityManager(72):显示com.fitness_sport_betta / com.facebook.LoginActivity:+ 621ms(总+ 851ms)
669:DEBUG / dalvikvm(389):GC_CONCURRENT释放1685K,41%免费6996K / 11783K,外部只有716K / 1038K,暂停16ms的+ 11毫秒
420:WARN / fb4a:FB:OrcaServiceQueue(389):在服役期间异常
420:WARN / fb4a:FB:OrcaServiceQueue(389):com.facebook.orca.protocol.base.ApiException:remote_app_id不匹配存储的ID
420:WARN / fb4a:FB:OrcaServiceQueue(389):在com.facebook.orca.protocol.base.ApiResponseChecker.b(ApiResponseChecker.java:74)
420:WARN / fb4a:FB:OrcaServiceQueue(389):在com.facebook.orca.protocol.base.ApiResponseChecker.a(ApiResponseChecker.java:103)
420:WARN / fb4a:FB:OrcaServiceQueue(389):在com.facebook.orca.protocol.base.ApiResponse.g(ApiResponse.java:184)
420:WARN / fb4a:FB:OrcaServiceQueue(389):在com.facebook.katana.server.protocol.AuthorizeAppMethod.a(AuthorizeAppMethod.java:267)
420:WARN / fb4a:FB:OrcaServiceQueue(389):在com.facebook.katana.server.protocol.AuthorizeAppMethod.a(AuthorizeAppMethod.java:28)
420:WARN / fb4a:FB:OrcaServiceQueue(389):在com.facebook.orca.protocol.base.SingleMethodRunner.a(SingleMethodRunner.java:125)
420:WARN / fb4a:FB:OrcaServiceQueue(389):在com.facebook.katana.server.handler.PlatformOperationHandler.c(PlatformOperationHandler.java:274)
420:WARN / fb4a:FB:OrcaServiceQueue(389):在com.facebook.katana.server.handler.PlatformOperationHandler.a(PlatformOperationHandler.java:175)
420:WARN / fb4a:FB:OrcaServiceQueue(389):在com.facebook.orca.server.OrcaServiceQueue.d(OrcaServiceQueue.java:214)
420:WARN / fb4a:FB:OrcaServiceQueue(389):在com.facebook.orca.server.OrcaServiceQueue.d(OrcaServiceQueue.java:37)
420:WARN / fb4a:FB:OrcaServiceQueue(389):在com.facebook.orca.server.OrcaServiceQueue $ 3.run(OrcaServiceQueue.java:168)
420:WARN / fb4a:FB:OrcaServiceQueue(389):在android.os.Handler.handleCallback(Handler.java:587)
420:WARN / fb4a:FB:OrcaServiceQueue(389):在android.os.Handler.dispatchMessage(Handler.java:92)
420:WARN / fb4a:FB:OrcaServiceQueue(389):在android.os.Looper.loop(Looper.java:123)
420:WARN / fb4a:FB:OrcaServiceQueue(389):在android.os.HandlerThread.run(HandlerThread.java:60)
459:信息/ ActivityManager(72):开始:意向{行为= com.facebook.platform.PLATFORM_ACTIVITY猫= [android.intent.category.DEFAULT] CMP = com.facebook.katana / .platform.PlatformActivity(有群众演员)}从PID 847
639:信息/ ActivityManager(72):开始:意向{CMP = com.facebook.katana / .platform.PlatformWrapperActivity(有演员)}从PID 389
670:信息/ ActivityManager(72):显示com.facebook.katana / .platform.PlatformActivity:+ 1s87ms
779:信息/ ActivityManager(72):显示com.facebook.katana / .platform.PlatformWrapperActivity:+ 1s106ms
449:WARN / fb4a:FB:OrcaServiceQueue(389):在服役期间异常
449:WARN / fb4a:FB:OrcaServiceQueue(389):com.facebook.orca.protocol.base.ApiException:remote_app_id不匹配存储的ID
449:WARN / fb4a:FB:OrcaServiceQueue(389):在com.facebook.orca.protocol.base.ApiResponseChecker.b(ApiResponseChecker.java:74)
449:WARN / fb4a:FB:OrcaServiceQueue(389):在com.facebook.orca.protocol.base.ApiResponseChecker.a(ApiResponseChecker.java:103)
449:WARN / fb4a:FB:OrcaServiceQueue(389):在com.facebook.orca.protocol.base.ApiResponse.g(ApiResponse.java:184)
449:WARN / fb4a:FB:OrcaServiceQueue(389):在com.facebook.katana.server.protocol.AuthorizeAppMethod.a(AuthorizeAppMethod.java:267)
449:WARN / fb4a:FB:OrcaServiceQueue(389):在com.facebook.katana.server.protocol.AuthorizeAppMethod.a(AuthorizeAppMethod.java:28)
449:WARN / fb4a:FB:OrcaServiceQueue(389):在com.facebook.orca.protocol.base.SingleMethodRunner.a(SingleMethodRunner.java:125)
449:WARN / fb4a:FB:OrcaServiceQueue(389):在com.facebook.katana.server.handler.PlatformOperationHandler.c(PlatformOperationHandler.java:274)
449:WARN / fb4a:FB:OrcaServiceQueue(389):在com.facebook.katana.server.handler.PlatformOperationHandler.a(PlatformOperationHandler.java:175)
449:WARN / fb4a:FB:OrcaServiceQueue(389):在com.facebook.orca.server.OrcaServiceQueue.d(OrcaServiceQueue.java:214)
449:WARN / fb4a:FB:OrcaServiceQueue(389):在com.facebook.orca.server.OrcaServiceQueue.d(OrcaServiceQueue.java:37)
449:WARN / fb4a:FB:OrcaServiceQueue(389):在com.facebook.orca.server.OrcaServiceQueue $ 3.run(OrcaServiceQueue.java:168)
449:WARN / fb4a:FB:OrcaServiceQueue(389):在android.os.Handler.handleCallback(Handler.java:587)
449:WARN / fb4a:FB:OrcaServiceQueue(389):在android.os.Handler.dispatchMessage(Handler.java:92)
449:WARN / fb4a:FB:OrcaServiceQueue(389):在android.os.Looper.loop(Looper.java:123)
449:WARN / fb4a:FB:OrcaServiceQueue(389):在android.os.HandlerThread.run(HandlerThread.java:60)
469:WARN / fb4a:FB:GDPDialog(389):无法发送
469:WARN / fb4a:FB:GDPDialog(389):com.facebook.orca.ops.ServiceException:API_ERROR:API_ERROR
469:WARN / fb4a:FB:GDPDialog(389):在com.facebook.orca.ops.OrcaServiceOperation.c(OrcaServiceOperation.java:597)
469:WARN / fb4a:FB:GDPDialog(389):在com.facebook.orca.ops.OrcaServiceOperation.c(OrcaServiceOperation.java:38)
469:WARN / fb4a:FB:GDPDialog(389):在com.facebook.orca.ops.OrcaServiceOperation $ 2.运行(OrcaServiceOperation.java:562)
469:WARN / fb4a:FB:GDPDialog(389):在android.os.Handler.handleCallback(Handler.java:587)
469:WARN / fb4a:FB:GDPDialog(389):在android.os.Handler.dispatchMessage(Handler.java:92)
469:WARN / fb4a:FB:GDPDialog(389):在android.os.Looper.loop(Looper.java:123)
469:WARN / fb4a:FB:GDPDialog(389):在android.app.ActivityThread.main(ActivityThread.java:3683)
469:WARN / fb4a:FB:GDPDialog(389):在java.lang.reflect.Method.invokeNative(本机方法)
469:WARN / fb4a:FB:GDPDialog(389):在java.lang.reflect.Method.invoke(Method.java:507)
469:WARN / fb4a:FB:GDPDialog(389):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)
469:WARN / fb4a:FB:GDPDialog(389):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
469:WARN / fb4a:FB:GDPDialog(389):在dalvik.system.NativeStart.main(本机方法)
009:WARN / InputManagerService(72):对非重点客户com.android.internal.view.IInputMethodClient$Stub$Proxy@40677138开始输入(UID = 10030 PID = 847)
009:WARN / InputManagerService(72):客户端不活跃,忽略重点增益:com.android.internal.view.IInputMethodClient$Stub$Proxy@40556e88
529:信息/ ActivityManager(72):显示com.fitness_sport_betta / .SettingsApps:+ 10s839ms
 

最近更新:

 公共类SettingsApps延伸活动{

公共最后弦乐API_KEY =492429660800628;
商标=新的Facebook(API_KEY);
公众最终的String []的权限= {publish_stream};
字符串mUserId;
字符串mUserToken;
字符串mUserName;
字符串mUserEmail;

@覆盖
保护无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.settings);

如果(Session.getActiveSession()==空|| Session.getActiveSession()。isClosed返()){
    Session.openActiveSession(这一点,真,新StatusCallback(){
        公共无效电话(最后一届会议上,SessionState会状态,例外的例外){
            的System.out.println(状态=+状态);
            authorizeAndPostMassage();
            如果(例外!= NULL){
                的System.out.println(有些事遭遇不测!);
                exception.printStackTrace();
            }
        }
    });
}
}

公共无效authorizeAndPostMassage(){

    facebook.authorize(这一点,权限,新DialogListener(){
        公共无效的onComplete(束值){
                Toast.makeText(SettingsApps.this,授权成功,Toast.LENGTH_SHORT).show();
                getProfileInformation();
        }
        公共无效onFacebookError(FacebookError E){
            Toast.makeText(SettingsApps.this,Facebook的错误,稍后再试,Toast.LENGTH_SHORT).show();
        }
        公共无效onerror的(DialogError E){
            Toast.makeText(SettingsApps.this,错误,稍后再试,Toast.LENGTH_SHORT).show();
        }
        公共无效OnCancel的(){
            //Этотколлбэкникогданесрабатывает,вероятно,ошибкавSDK
            Toast.makeText(SettingsApps.this,取消授权,Toast.LENGTH_SHORT).show();
        }});
}

公共无效getProfileInformation(){
    尝试 {

        JSONObject的轮廓= Util.parseJson(facebook.request(我));
        Log.e(档案,+配置文件);

        mUserId = profile.getString(ID);
        mUserToken = facebook.getAccessToken();
        mUserName = profile.getString(姓名);
        mUserEmail = profile.getString(电子邮件);
        runOnUiThread(新的Runnable(){
            公共无效的run(){
                Log.v(FaceBook_Profile,+ mUserId +\ N+ mUserToken +\ N+ mUserName +\ N+ mUserEmail);
                Toast.makeText(getApplicationContext(),
                        姓名:+ mUserName +\ nEmail:+ mUserEmail,
                        Toast.LENGTH_LONG).show();
            }
        });

    }赶上(FacebookError E){
        e.printStackTrace();
    }赶上(MalformedURLException异常E){
        e.printStackTrace();
    }赶上(JSONException E){
        e.printStackTrace();
    }赶上(IOException异常E){
        e.printStackTrace();
    }
}

@覆盖
公共无效onActivityResult(INT申请code,INT结果code,意图数据){
  super.onActivityResult(要求code,因此code,数据);
  facebook.authorizeCallback(要求code,因此code,数据);
  }
}
 

解决方案

这code为Facebook SDK 3.0 它`的作品!

 公共类FacebookInfo延伸活动{
...
字符串get_id,get_name,get_gender,get_email,get​​_birthday,get_locale,get_location;

私人Session.StatusCallback fbStatusCallback =新Session.StatusCallback(){
    公共无效呼叫(会话的会话,SessionState会状态,例外的例外){
        如果(state.isOpened()){
            Request.executeMeRequestAsync(会话,新Request.GraphUserCallback(){
                公共无效onCompleted(GraphUser用户,响应响应){
                    如果(响应!= NULL){
                        //做一些事情以<响应>现在
                        尝试{
                            get_id = user.getId();
                            get_name = user.getName();
                            get_gender =(字符串)user.getProperty(性别);
                            get_email =(字符串)user.getProperty(电子邮件);
                            get_birthday = user.getBirthday();
                            get_locale =(字符串)user.getProperty(区域设置);
                            get_location = user.getLocation()的toString()。

                        Log.d(LOG_TAG,user.getId()+;+
                            user.getName()+;+
                            (字符串)user.getProperty(性别)+,+
                            (字符串)user.getProperty(电子邮件)+,+
                            user.getBirthday()+;+
                            (字符串)user.getProperty(区域设置)+,+
                            user.getLocation());
                        }赶上(例外五){
                             e.printStackTrace();
                             Log.d(LOG_TAG,例外五);
                         }

                    }
                }
            });
        }
    }
};
...
 保护无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.fbinfo);
    尝试 {
        openActiveSession(这一点,真,fbStatusCallback,Arrays.asList(
                新的String [] {电子邮件,user_location,user_birthday
 user_likes,publish_actions}),savedInstanceState);
    }
    赶上(例外五){
        e.printStackTrace();
    }
  私人会话openActiveSession(活动活动,布尔allowLoginUI,
 StatusCallback回调,列表和LT;字符串>权限,捆绑savedInstanceState){
    OpenRequest openRequest =新OpenRequest(活性)。
setPermissions(权限).setLoginBehavior(SessionLoginBehavior。
SSO_WITH_FALLBACK).setCallback(回调)。
setDefaultAudience(SessionDefaultAudience.FRIENDS);

    会话会话= Session.getActiveSession();
    Log.d(LOG_TAG,+会话);
    如果(会话== NULL){
        Log.d(LOG_TAG,+ savedInstanceState);
        如果(savedInstanceState!= NULL){
            会议= Session.restoreSession(本,空,fbStatusCallback,savedInstanceState);
        }
        如果(会话== NULL){
            会议=新的Session(本);
        }
        Session.setActiveSession(会议);
        如果(session.getState()。等于(SessionState.CREATED_TOKEN_LOADED)|| allowLoginUI){
            session.openForRead(openRequest);
            返回会议;
        }
    }
    返回null;
}
@覆盖
公共无效onActivityResult(INT申请code,INT结果code,意图数据){
    super.onActivityResult(要求code,因此code,数据);
    Session.getActiveSession()onActivityResult(这一点,要求code,因此code,数据)。
}
}
 

I'm trying to get user profile information Facebook. Begins loading, I click to confirm permission to send my profile, again, continue loading but eventually get empty fields.

What am I doing wrong? Help please.

public class SettingsApps extends Activity {
public final String API_KEY = "492429660800628";
Facebook facebook = new Facebook(API_KEY);

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);

mPrefs=getPreferences(MODE_PRIVATE);
String acces_token=mPrefs.getString("acces_token",null);
long expires=mPrefs.getLong("acces_expires", 0);

if (Session.getActiveSession() == null || Session.getActiveSession().isClosed()) {
    Session.openActiveSession(this, true, new StatusCallback() { 
        public void call(Session session, SessionState state, Exception exception) {
            System.out.println("State= " + state);

            if (session.isOpened()) {
                System.out.println("Token=" + session.getAccessToken());
                Request request =  Request.newMeRequest(session, new GraphUserCallback() {       
                            public void onCompleted(GraphUser user, Response response) {                                

                                if (user != null) {
                                    TextView idText = (TextView)findViewById(R.id.id);
                                    TextView first_nameText = (TextView)findViewById(R.id.first_name);
                                    TextView last_nameText = (TextView)findViewById(R.id.last_name);
                                    idText.setText(user.getId());
                                    first_nameText.setText(user.getFirstName());
                                    last_nameText.setText(user.getLastName());
                                }
                                if (response != null) {
                                    System.out.println("Response="  + response);
                                    Toast.makeText(SettingsApps.this, response.toString(),
                                            Toast.LENGTH_LONG).show();
                                }
                            }
                        });
                Request.executeBatchAsync(request);
            }
            if (exception != null) {
                System.out.println("Some thing bad happened!");
                exception.printStackTrace();
            }
        }
    });
}
}   
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  facebook.authorizeCallback(requestCode, resultCode, data);
  }
}

LogCat

669: INFO/ActivityManager(72): Starting: Intent { cmp=com.fitness_sport_betta/.SettingsApps } from pid 847
899: INFO/ActivityManager(72): Starting: Intent { act=SSO_WITH_FALLBACK cmp=com.fitness_sport_betta/com.facebook.LoginActivity (has extras) } from pid 847
949: INFO/System.out(847): State= OPENING
539: INFO/ActivityManager(72): Displayed com.fitness_sport_betta/com.facebook.LoginActivity: +621ms (total +851ms)
669: DEBUG/dalvikvm(389): GC_CONCURRENT freed 1685K, 41% free 6996K/11783K, external 716K/1038K, paused 16ms+11ms
420: WARN/fb4a:fb:OrcaServiceQueue(389): Exception during service
420: WARN/fb4a:fb:OrcaServiceQueue(389): com.facebook.orca.protocol.base.ApiException: remote_app_id does not match stored id 
420: WARN/fb4a:fb:OrcaServiceQueue(389):     at com.facebook.orca.protocol.base.ApiResponseChecker.b(ApiResponseChecker.java:74)
420: WARN/fb4a:fb:OrcaServiceQueue(389):     at com.facebook.orca.protocol.base.ApiResponseChecker.a(ApiResponseChecker.java:103)
420: WARN/fb4a:fb:OrcaServiceQueue(389):     at com.facebook.orca.protocol.base.ApiResponse.g(ApiResponse.java:184)
420: WARN/fb4a:fb:OrcaServiceQueue(389):     at com.facebook.katana.server.protocol.AuthorizeAppMethod.a(AuthorizeAppMethod.java:267)
420: WARN/fb4a:fb:OrcaServiceQueue(389):     at com.facebook.katana.server.protocol.AuthorizeAppMethod.a(AuthorizeAppMethod.java:28)
420: WARN/fb4a:fb:OrcaServiceQueue(389):     at com.facebook.orca.protocol.base.SingleMethodRunner.a(SingleMethodRunner.java:125)
420: WARN/fb4a:fb:OrcaServiceQueue(389):     at com.facebook.katana.server.handler.PlatformOperationHandler.c(PlatformOperationHandler.java:274)
420: WARN/fb4a:fb:OrcaServiceQueue(389):     at com.facebook.katana.server.handler.PlatformOperationHandler.a(PlatformOperationHandler.java:175)
420: WARN/fb4a:fb:OrcaServiceQueue(389):     at com.facebook.orca.server.OrcaServiceQueue.d(OrcaServiceQueue.java:214)
420: WARN/fb4a:fb:OrcaServiceQueue(389):     at com.facebook.orca.server.OrcaServiceQueue.d(OrcaServiceQueue.java:37)
420: WARN/fb4a:fb:OrcaServiceQueue(389):     at com.facebook.orca.server.OrcaServiceQueue$3.run(OrcaServiceQueue.java:168)
420: WARN/fb4a:fb:OrcaServiceQueue(389):     at android.os.Handler.handleCallback(Handler.java:587)
420: WARN/fb4a:fb:OrcaServiceQueue(389):     at android.os.Handler.dispatchMessage(Handler.java:92)
420: WARN/fb4a:fb:OrcaServiceQueue(389):     at android.os.Looper.loop(Looper.java:123)
420: WARN/fb4a:fb:OrcaServiceQueue(389):     at android.os.HandlerThread.run(HandlerThread.java:60)
459: INFO/ActivityManager(72): Starting: Intent { act=com.facebook.platform.PLATFORM_ACTIVITY cat=[android.intent.category.DEFAULT] cmp=com.facebook.katana/.platform.PlatformActivity (has extras) } from pid 847
639: INFO/ActivityManager(72): Starting: Intent { cmp=com.facebook.katana/.platform.PlatformWrapperActivity (has extras) } from pid 389
670: INFO/ActivityManager(72): Displayed com.facebook.katana/.platform.PlatformActivity: +1s87ms
779: INFO/ActivityManager(72): Displayed com.facebook.katana/.platform.PlatformWrapperActivity: +1s106ms
449: WARN/fb4a:fb:OrcaServiceQueue(389): Exception during service
449: WARN/fb4a:fb:OrcaServiceQueue(389): com.facebook.orca.protocol.base.ApiException: remote_app_id does not match stored id 
449: WARN/fb4a:fb:OrcaServiceQueue(389):     at com.facebook.orca.protocol.base.ApiResponseChecker.b(ApiResponseChecker.java:74)
449: WARN/fb4a:fb:OrcaServiceQueue(389):     at com.facebook.orca.protocol.base.ApiResponseChecker.a(ApiResponseChecker.java:103)
449: WARN/fb4a:fb:OrcaServiceQueue(389):     at com.facebook.orca.protocol.base.ApiResponse.g(ApiResponse.java:184)
449: WARN/fb4a:fb:OrcaServiceQueue(389):     at com.facebook.katana.server.protocol.AuthorizeAppMethod.a(AuthorizeAppMethod.java:267)
449: WARN/fb4a:fb:OrcaServiceQueue(389):     at com.facebook.katana.server.protocol.AuthorizeAppMethod.a(AuthorizeAppMethod.java:28)
449: WARN/fb4a:fb:OrcaServiceQueue(389):     at com.facebook.orca.protocol.base.SingleMethodRunner.a(SingleMethodRunner.java:125)
449: WARN/fb4a:fb:OrcaServiceQueue(389):     at com.facebook.katana.server.handler.PlatformOperationHandler.c(PlatformOperationHandler.java:274)
449: WARN/fb4a:fb:OrcaServiceQueue(389):     at com.facebook.katana.server.handler.PlatformOperationHandler.a(PlatformOperationHandler.java:175)
449: WARN/fb4a:fb:OrcaServiceQueue(389):     at com.facebook.orca.server.OrcaServiceQueue.d(OrcaServiceQueue.java:214)
449: WARN/fb4a:fb:OrcaServiceQueue(389):     at com.facebook.orca.server.OrcaServiceQueue.d(OrcaServiceQueue.java:37)
449: WARN/fb4a:fb:OrcaServiceQueue(389):     at com.facebook.orca.server.OrcaServiceQueue$3.run(OrcaServiceQueue.java:168)
449: WARN/fb4a:fb:OrcaServiceQueue(389):     at android.os.Handler.handleCallback(Handler.java:587)
449: WARN/fb4a:fb:OrcaServiceQueue(389):     at android.os.Handler.dispatchMessage(Handler.java:92)
449: WARN/fb4a:fb:OrcaServiceQueue(389):     at android.os.Looper.loop(Looper.java:123)
449: WARN/fb4a:fb:OrcaServiceQueue(389):     at android.os.HandlerThread.run(HandlerThread.java:60)
469: WARN/fb4a:fb:GDPDialog(389): Failed to send
469: WARN/fb4a:fb:GDPDialog(389): com.facebook.orca.ops.ServiceException: API_ERROR: API_ERROR
469: WARN/fb4a:fb:GDPDialog(389):     at com.facebook.orca.ops.OrcaServiceOperation.c(OrcaServiceOperation.java:597)
469: WARN/fb4a:fb:GDPDialog(389):     at com.facebook.orca.ops.OrcaServiceOperation.c(OrcaServiceOperation.java:38)
469: WARN/fb4a:fb:GDPDialog(389):     at com.facebook.orca.ops.OrcaServiceOperation$2.run(OrcaServiceOperation.java:562)
469: WARN/fb4a:fb:GDPDialog(389):     at android.os.Handler.handleCallback(Handler.java:587)
469: WARN/fb4a:fb:GDPDialog(389):     at android.os.Handler.dispatchMessage(Handler.java:92)
469: WARN/fb4a:fb:GDPDialog(389):     at android.os.Looper.loop(Looper.java:123)
469: WARN/fb4a:fb:GDPDialog(389):     at android.app.ActivityThread.main(ActivityThread.java:3683)
469: WARN/fb4a:fb:GDPDialog(389):     at java.lang.reflect.Method.invokeNative(Native Method)
469: WARN/fb4a:fb:GDPDialog(389):     at java.lang.reflect.Method.invoke(Method.java:507)
469: WARN/fb4a:fb:GDPDialog(389):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
469: WARN/fb4a:fb:GDPDialog(389):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
469: WARN/fb4a:fb:GDPDialog(389):     at dalvik.system.NativeStart.main(Native Method)
009: WARN/InputManagerService(72): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@40677138 (uid=10030 pid=847)
009: WARN/InputManagerService(72): Client not active, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@40556e88
529: INFO/ActivityManager(72): Displayed com.fitness_sport_betta/.SettingsApps: +10s839ms

Last change:

public class SettingsApps extends Activity {

public final String API_KEY = "492429660800628";
Facebook facebook = new Facebook(API_KEY);
public final String[] permissions = {"publish_stream"};
String mUserId;
String mUserToken;
String mUserName;
String mUserEmail;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);

if (Session.getActiveSession() == null || Session.getActiveSession().isClosed()) {
    Session.openActiveSession(this, true, new StatusCallback() { 
        public void call(final Session session, SessionState state, Exception exception) {
            System.out.println("State= " + state);
            authorizeAndPostMassage(); 
            if (exception != null) {
                System.out.println("Some thing bad happened!");
                exception.printStackTrace();
            }
        }
    });
}
}

public void authorizeAndPostMassage() {

    facebook.authorize(this, permissions, new DialogListener () {
        public void onComplete(Bundle values) {
                Toast.makeText(SettingsApps.this, "Authorization successful", Toast.LENGTH_SHORT).show();
                getProfileInformation();    
        }       
        public void onFacebookError(FacebookError e) {
            Toast.makeText(SettingsApps.this, "Facebook error, try again later", Toast.LENGTH_SHORT).show();                
        }       
        public void onError(DialogError e) {
            Toast.makeText(SettingsApps.this, "Error, try again later", Toast.LENGTH_SHORT).show();             
        }       
        public void onCancel() {
            //Этот коллбэк никогда не срабатывает, вероятно, ошибка в SDK
            Toast.makeText(SettingsApps.this, "Authorization canceled", Toast.LENGTH_SHORT).show();                         
        }});        
}

public void getProfileInformation() {
    try {

        JSONObject profile = Util.parseJson(facebook.request("me"));
        Log.e("Profile", "" + profile);

        mUserId = profile.getString("id");
        mUserToken = facebook.getAccessToken();
        mUserName = profile.getString("name");
        mUserEmail = profile.getString("email");
        runOnUiThread(new Runnable() {
            public void run() {
                Log.v("FaceBook_Profile",""+mUserId+"\n"+mUserToken+"\n"+mUserName+"\n"+mUserEmail);
                Toast.makeText(getApplicationContext(),
                        "Name: " + mUserName + "\nEmail: " + mUserEmail,
                        Toast.LENGTH_LONG).show();
            }
        });

    } catch (FacebookError e) {
        e.printStackTrace();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (JSONException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  facebook.authorizeCallback(requestCode, resultCode, data);
  }
}

解决方案

This code for facebook SDK 3.0 It`s works!

public class FacebookInfo extends Activity {
...
String get_id, get_name, get_gender, get_email, get_birthday, get_locale, get_location;

private Session.StatusCallback fbStatusCallback = new Session.StatusCallback() {
    public void call(Session session, SessionState state, Exception exception) {
        if (state.isOpened()) {
            Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
                public void onCompleted(GraphUser user, Response response) {
                    if (response != null) {
                        // do something with <response> now
                        try{
                            get_id = user.getId();
                            get_name = user.getName();
                            get_gender = (String) user.getProperty("gender");
                            get_email = (String) user.getProperty("email");
                            get_birthday = user.getBirthday();
                            get_locale = (String) user.getProperty("locale");
                            get_location = user.getLocation().toString();   

                        Log.d(LOG_TAG, user.getId() + "; " +  
                            user.getName() + "; " +
                            (String) user.getProperty("gender") + "; " +        
                            (String) user.getProperty("email") + "; " +
                            user.getBirthday()+ "; " +
                            (String) user.getProperty("locale") + "; " +
                            user.getLocation());
                        } catch(Exception e) {
                             e.printStackTrace();
                             Log.d(LOG_TAG, "Exception e");
                         }

                    }
                }
            });
        }
    }
};
...
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fbinfo);
    try {
        openActiveSession(this, true, fbStatusCallback, Arrays.asList(
                new String[] { "email",  "user_location", "user_birthday",
 "user_likes", "publish_actions" }), savedInstanceState);
    }
    catch (Exception e) {
        e.printStackTrace();
    }
  private  Session openActiveSession(Activity activity, boolean allowLoginUI,
 StatusCallback callback, List<String> permissions, Bundle savedInstanceState) {
    OpenRequest openRequest = new OpenRequest(activity).
setPermissions(permissions).setLoginBehavior(SessionLoginBehavior.
SSO_WITH_FALLBACK).setCallback(callback).
setDefaultAudience(SessionDefaultAudience.FRIENDS);

    Session session = Session.getActiveSession();
    Log.d(LOG_TAG, "" + session);
    if (session == null) {
        Log.d(LOG_TAG, "" + savedInstanceState);
        if (savedInstanceState != null) {
            session = Session.restoreSession(this, null, fbStatusCallback, savedInstanceState);
        }
        if (session == null) {
            session = new Session(this);
        }
        Session.setActiveSession(session);
        if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED) || allowLoginUI) {
            session.openForRead(openRequest);
            return session;
        }
    }
    return null;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
}

这篇关于如何获取用户的个人资料信息的Facebook的Andr​​oid的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆