Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can not access Facebook friends via Android application

I have a problem with accessing the graph API through my android application that retrieves a user's friends as JSONObject, extracts their names and displays them on the screen. It is supposed to be a simple and straightforward task but apparently it is not. When I run my application on Android Nexus I, I login to Facebook, then I am asked I click "Allow" button to grant permissions and I am redirected to a blank page. I am expect to see the name of my friends but it does not happen. Could some one assist me.

public class Login extends Activity 
{
    Facebook mFacebook = new Facebook("201509899926116");
    AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(mFacebook);
    String FILENAME = "AndroidSSO_data";
    private SharedPreferences mPrefs;
    View linearLayout;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        linearLayout = findViewById(R.id.main_layout);

         /* Get existing access_token if any */
        mPrefs = getPreferences(MODE_PRIVATE);
        String access_token = mPrefs.getString("access_token", null);
        long expires = mPrefs.getLong("access_expires", 0);

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

        /* Only call authorize if the access_token has expired. */
        if(!mFacebook.isSessionValid())
        {
            mFacebook.authorize(this, new String[] {"user_birthday","email",
                  "user_relationships","user_religion_politics","user_hometown",
                  "user_location","user_relationship_details","user_education_history",
                  "user_likes","user_interests", "user_activities"},
                  new DialogListener() 
            {

                @Override
                public void onComplete(Bundle values)
                {
                    SharedPreferences.Editor editor = mPrefs.edit();
                    editor.putString("access_token", mFacebook.getAccessToken());
                    editor.putLong("access_expires", mFacebook.getAccessExpires());
                    editor.commit();

                    /* access the graph API */
                    Log.d("Facebook-Example-Friends Request", "Started API request");
                    mAsyncRunner.request("me/friends", new FriendsRequestListener());
                    Log.d("Facebook-Example-Friends Request", "Finished API request");
                }

                @Override
                public void onFacebookError(FacebookError error) {}

                @Override
                public void onError(DialogError e) {}

                @Override
                public void onCancel() {}
            });
        }
    }

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

    public class FriendsRequestListener implements com.facebook.android.AsyncFacebookRunner.RequestListener 
    {
        /**
         * Called when the request to get friends has been completed.
         * Retrieve and parse and display the JSON stream.
         */
        public void onComplete(final String response)
        {
            try 
            {
                // process the response here: executed in background thread
                Log.d("Facebook-Example-Friends Request", "response.length(): " + response.length());
                Log.d("Facebook-Example-Friends Request", "Response: " + response);

                final JSONObject json = new JSONObject(response);
                JSONArray d = json.getJSONArray("data");
                int l = (d != null ? d.length() : 0);
                Log.d("Facebook-Example-Friends Request", "d.length(): " + l);

                for (int i=0; i<l; i++) 
                {
                    JSONObject o = d.getJSONObject(i);
                    String n = o.getString("name");
                    String id = o.getString("id");

                    TextView tv = new TextView(Login.this);
                    tv.setText(n);
                    ((LinearLayout) linearLayout).addView(tv);
                }               
            }
            catch (JSONException e)
            {
                Log.w("Facebook-Example", "JSON Error in response");
            }
        }
    }
}
like image 946
NewToAndroid Avatar asked Nov 16 '11 18:11

NewToAndroid


People also ask

How do I allow an app to access my friends on Facebook?

Scroll down and tap Settings, then tap Apps and Websites. Tap Logged in with Facebook. Tap the app that you want to adjust who can see your activity, then tap . Choose who you want to see that you use the app: Public, Friends or Only me.

Why is Facebook not working on app?

Try refreshing your browser or reopening the site; on a mobile app, close and reopen the app. You can also check to see if Facebook is offline and then restart your device, update apps, and clear your cache. Visit Insider's Tech Reference library for more stories.

How do I see my Facebook friends on Android?

It's at the top-right corner of the screen. Tap Friends. This displays your entire friends list. If you don't see the Friends section, tap Find Friends, and then tap Friends at the top of the page.

Why can't I see friends on Facebook?

If you've blocked someone or they've blocked you, you won't see their profile.


1 Answers

I think i might've found the issue.. According to the documentation on onComplet;

     /**
     * Called when a request completes with the given response.
     * 
     * Executed by a background thread: do not update the UI in this method.
     */

And you are trying to update your UI, so addViews don't actually get reflected on the UI thread.. You should create a method in your activity that you can call from onComplete with runOnUIThread.. Something like this;

runOnUiThread(new Runnable() {
            public void run() {
                inserFacebookNames(facebookContactNames);
            }
        });

Let me know if this actually fixes it.. I'm curious if that was the reason..

like image 158
Tolga E Avatar answered Sep 19 '22 03:09

Tolga E