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");
}
}
}
}
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.
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.
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.
If you've blocked someone or they've blocked you, you won't see their profile.
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..
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With