【问题标题】:Issue getting Facebook information获取 Facebook 信息的问题
【发布时间】:2015-08-11 21:17:12
【问题描述】:

我希望在我的代码中包含 facebook 个人资料信息。这段代码在 Log.e("in try start", "tryyyyyyyyy"); 之前一直有效,但在那之后甚至没有执行单个日志。

private Facebook facebook;
private AsyncFacebookRunner mAsyncRunner;
String FILENAME = "AndroidSSO_data";
private SharedPreferences mPrefs;
public void loginToFacebook() {
    // mPrefs = getPreferences(SharedPreferences.);
    //  String access_token = mPrefs.getString("access_token", null);
    //long expires = mPrefs.getLong("access_expires", 0);

    // if (access_token != null) {
    //  facebook.setAccessToken(access_token);
    // }

    // if (expires != 0) {
    //  facebook.setAccessExpires(expires);
    // }

    if (!facebook.isSessionValid()) {
        facebook.authorize(getActivity(),
                new String[] { "email", "publish_actions" },
                new DialogListener() {

            @Override
            public void onCancel() {
                // Function to handle cancel event
            }

            @Override
            public void onComplete(Bundle values) {
                // Function to handle complete event
                // Edit Preferences and update facebook acess_token

                Toast.makeText(getActivity(), "hiiiiii", Toast.LENGTH_SHORT).show();
                //mPrefs=getSharedPreferences("data", getActivity().MODE_PRIVATE); 

                SharedPreferences.Editor editor = mPrefs.edit();
                editor.putString("access_token",
                        facebook.getAccessToken());
                editor.putLong("access_expires",
                        facebook.getAccessExpires());
                editor.commit();
                Log.e("getProfileInformation entry", "getProfileInformation");

                getProfileInformation();
            }



            @Override
            public void onFacebookError(FacebookError e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onError(DialogError e) {
                // TODO Auto-generated method stub

            }

        });
    }
}

public void getProfileInformation() {
    Toast.makeText(getActivity(), "byeeeeeee", Toast.LENGTH_SHORT).show();
    Log.e("getProfileInformation start", "getProfileInformation");
    mAsyncRunner.request("me", new RequestListener() {
        @Override
        public void onComplete(String response, Object state) {
            Log.d("Profile", response);
            String json = response;
            try {
                Log.e("in try start", "tryyyyyyyyy");

                JSONObject profile = new JSONObject(json);
                // getting name of the user
                Log.d("profile", ""+profile);

                fb_name = profile.getString("name");
                // getting email of the user
                fb_email = profile.getString("email");
                Log.d("fb_name", "naem"+fb_name+"emial"+fb_email);
                //fb_login=true;
                //  fb_Image =  getUserPic(fb_email);
                //  LoginFuction();
            } catch (JSONException e) {
                e.printStackTrace();
                Log.e("catchhhhhh", ""+e.getMessage());
            }
        }
        public Bitmap getUserPic(String userID) {
            String imageURL;
            Bitmap bitmap = null;
            Log.d("TAG", "Loading Picture");
            imageURL = "http://graph.facebook.com/"+userID+"/picture?type=small";
            try {
                bitmap = BitmapFactory.decodeStream((InputStream)new URL(imageURL).getContent());
            } catch (Exception e) {
                Log.d("TAG", "Loading Picture FAILED");
                e.printStackTrace();
            }
            return bitmap;
        }
        @Override
        public void onIOException(IOException e, Object state) {
        }

        @Override
        public void onFileNotFoundException(FileNotFoundException e,
                Object state) {
        }

        @Override
        public void onMalformedURLException(MalformedURLException e,
                Object state) {
        }

        @Override
        public void onFacebookError(FacebookError e, Object state) {
        }
    });
}

此代码没有给我任何姓名或电子邮件 ID。

【问题讨论】:

  • 即使我在 oncomplete 方法中没有得到响应
  • 我已经对您的问题进行了格式化,以更好地适应格式。请不要用太多的粗体,句尾一个句号就够了。
  • 我是她的菜鸟.. 感谢您的帮助
  • 我正在处理片段..这个代码在那里也适用吗?????????

标签: android facebook integration


【解决方案1】:

-你好阿布舍克! - 我已经尝试使用Facebook sdk4.+,并且我得到了完美的个人资料信息。

-首先在oncreate 方法中添加以下代码到setcontentview 之前

 FacebookSdk.sdkInitialize(getApplicationContext());

-然后使用以下代码创建您Callbackmanager:-

callbackManager = CallbackManager.Factory.create();

-使用以下代码添加Permissions:-

permission.add("publish_actions");

-以下代码用于Login

LoginManager.getInstance().registerCallback(callbackManager,
                    new FacebookCallback<LoginResult>() {
                        @Override
                        public void onSuccess(final LoginResult loginResult) {
                            // App code
                        GraphRequest request = GraphRequest.newMeRequest(
                act,
                new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(
                            JSONObject object,
                            GraphResponse response) {


                        // Application code
                        if (!TextUtils.isEmpty(object.toString())) {
                            try {
                                JSONObject jresJsonObject = new JSONObject(object.toString());
                                String id = "", name = "", gender = "";
                                if (!(jresJsonObject.isNull("id"))) {
                                    id = jresJsonObject.getString("id");
                                }
                                if (!(jresJsonObject.isNull("gender"))) {
                                    gender = jresJsonObject.getString("gender");
                                    if (gender.equals("male")) {
                                        gender = "0";
                                    } else {
                                        gender = "1";
                                    }
                                }
                                if (!(jresJsonObject.isNull("name"))) {
                                    name = jresJsonObject.getString("name");
                                }


                            } catch (Exception e) {

                            }
                        }
                        Log.e("graphrequest", response.toString());
                    }
                });
        Bundle parameters = new Bundle();
        parameters.putString("fields", "id,name,gender,link");
        request.setParameters(parameters);
        request.executeAndWait();    
                        }

                        @Override
                        public void onCancel() {
                            Log.i("", "Access Token:: " + "loginResult.getAccessToken()");
                        }

                        @Override
                        public void onError(FacebookException exception) {
                            Log.i("", "Access Token:: " + "loginResult.getAccessToken()");
                        }
                    });


            LoginManager.getInstance().logInWithPublishPermissions(this, permission);

-最后但同样重要的是,在您的 OnActivitResult 中添加以下代码

 callbackManager.onActivityResult(requestCode, resultCode, data);

注意:- 这是使用最新的Facebook sdk -如果它没有用或者你仍然遇到问题,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    相关资源
    最近更新 更多