简体   繁体   中英

Android Login facebook integration

I am developing app using eclipse ADT. I am trying to login and get user data in facebook. I can login with facebook but i am unable to retrieve the user data. here i wrote a method

public void loginFacebook() {
            Log.d("Login Facebooktest Sessions", "loginfb called");
            mPrefs = getActivity().getPreferences(0);
            access_token = mPrefs.getString("access_token", null);
            long expires = mPrefs.getLong("access_expires", 0);

            if (access_token != null) {

                mFacebook.setAccessToken(access_token);
                Log.d("Facebooktest Sessions", "" + mFacebook.isSessionValid());

            }

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

            if (!mFacebook.isSessionValid()) {
                Log.d("login Facebooktest Sessions",
                        "" + !mFacebook.isSessionValid());
                mFacebook.authorize(getActivity(), new String[] {},
                        new DialogListener() {

                            @Override
                            public void onFacebookError(FacebookError e) {
                                // TODO Auto-generated method stub
                                Log.d("login Facebooktest onFacebookError", "" + e);
                            }

                            @Override
                            public void onError(DialogError e) {
                                // TODO Auto-generated method stub
                                Log.d("login Facebooktest onError ", "" + e);
                            }

                            @Override
                            public void onComplete(Bundle values) {
                                // TODO Auto-generated method stub
                                Log.d("login Facebooktest bundle", "" + values);
                                try {
                                    JSONObject me = new JSONObject(mFacebook
                                            .request("me"));
                                    SharedPreferences.Editor editor = mPrefs.edit();
                                    id = me.getString("id");
                                    name = me.getString("name");
                                    email = me.getString("email");
                                    gender = me.getString("gender");
                                    try {
                                        imageLink = new URL(
                                                "https://graph.facebook.com/" + id
                                                        + "/picture?type=large");
                                        Bitmap bmp = null;
                                        try {
                                            bmp = BitmapFactory
                                                    .decodeStream(imageLink
                                                            .openConnection()
                                                            .getInputStream());
                                        } catch (IOException e) {
                                            e.printStackTrace();
                                            Log.e("facebook complete IO error ", ""
                                                    + e);
                                        }
                                        proPic.setImageBitmap(bmp);
                                    } catch (MalformedURLException e) {
                                        e.printStackTrace();
                                        Log.e("facebook complete image error ", ""
                                                + e);
                                    }
                                    Log.d("facebook.getAccessToken()", "" + id
                                            + mFacebook.getAccessToken());
                                    editor.putString("userid", id);
                                    editor.putString("access_token",
                                            mFacebook.getAccessToken());
                                    editor.putLong("access_expires",
                                            mFacebook.getAccessExpires());
                                    editor.commit();
                                    new getFacebookData(id, name, email, gender)
                                            .execute();

                                    // getProfileInformation();
                                } catch (Exception e) {
                                    // TODO: handle exception
                                    e.printStackTrace();
                                    Log.e("login facebook complete error ", "" + e);
                                }

                            }

                            @Override
                            public void onCancel() {
                                // TODO Auto-generated method stub
                                Log.d("login Facebooktest onCancel", "onCancel");
                            }
                        });

            } else {
                Log.d("login Facebook login method",
                        "" + mFacebook.isSessionValid());
            }
        }

this is method is working upto if (!mFacebook.isSessionValid()) this if condition and i can get the true value, but my problem is, the onComplete() method is not working. If its work, i doing doinbackground operation for starting new page. How i can solve this issue

Thanks in advance

使用socialauth-android,简单又快速https://code.google.com/p/socialauth-android/

Just check your logcat for any NullPointerException if your values of id, name,gender ... are coming in JSON Object.If NO then first handle this like this

id=me.getString("id")==null ? "":me.getString("id");

or

if(me.getString("id")==null)
   { 
       id = "";
   }else
   {
      id=me.getString("id");
   }    

make one more dialog and use it in else part of if (!mFacebook.isSessionValid()) :

  else
 {
     facebook.dialog(this, "feed", new DialogListener(){

 @Override
                            public void onComplete(Bundle values) {
                                // TODO Auto-generated method stub
                                Log.d("login Facebooktest bundle", "" + values);
                                try {
                                    JSONObject me = new JSONObject(mFacebook
                                            .request("me"));
                                    SharedPreferences.Editor editor = mPrefs.edit();
                                    id = me.getString("id");
                                    name = me.getString("name");
                                    email = me.getString("email");
                                    gender = me.getString("gender");
                                    try {
                                        imageLink = new URL(
                                                "https://graph.facebook.com/" + id
                                                        + "/picture?type=large");
                                        Bitmap bmp = null;
                                        try {
                                            bmp = BitmapFactory
                                                    .decodeStream(imageLink
                                                            .openConnection()
                                                            .getInputStream());
                                        } catch (IOException e) {
                                            e.printStackTrace();
                                            Log.e("facebook complete IO error ", ""
                                                    + e);
                                        }
                                        proPic.setImageBitmap(bmp);
                                    } catch (MalformedURLException e) {
                                        e.printStackTrace();
                                        Log.e("facebook complete image error ", ""
                                                + e);
                                    }  
 }

 }); 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM