Unable to access Facebook friends via Android app

I have a problem accessing the graphical API through my Android app that retrieves the user's friends as JSONObject, retrieves their names and displays them on the screen. This is supposed to be a simple and easy task, but apparently it is not. When I launch my application on Android Nexus I, I log in to Facebook, then I am asked to click the "Allow" button to grant permissions, and I am redirected to a blank page. I expect to see the name of my friends, but this will not happen. Can anyone help me out.

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"); } } } } 
+6
source share
1 answer

I think that maybe I found the problem .. 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 user interface, so addViews are not actually reflected in the user interface thread. You must 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 really corrects. I wonder if that was the reason.

+2
source

Source: https://habr.com/ru/post/901645/


All Articles