Android Facebook Graph api información básica que solicita

Solo tratando de permitir que mi aplicación acceda a la información básica de un usuario de Facebook autenticado, sin embargo, mi logcat me dice

06-30 16: 37: 27.969: WARN / System.err (1559): com.facebook.android.FacebookError: Se debe utilizar un token de acceso activo para consultar información sobre el usuario actual.

Justo después de la autenticación donde se ejecuta el código. ¿Alguien me puede apuntar en la dirección correcta? He visto un post muy similar donde alguien utiliza código casi idéntico y funcionó.

Gracias

Facebook facebook = new Facebook("187212574660004"); TextView nText; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); nText = (TextView) this.findViewById(R.id.nameText); facebook.authorize(this, new String[] {"offline_access", "user_interests", "friends_interests"}, new DialogListener() { public void onComplete(Bundle values) { setContentView(R.layout.homepage); } public void onFacebookError(FacebookError error) {} public void onError(DialogError e) {} public void onCancel() {} }); JSONObject json_data = null; try { JSONObject response = Util.parseJson(facebook.request("me/friends")); // Get a friend information from facebook JSONArray jArray = response.getJSONArray("data"); json_data = jArray.getJSONObject(0); String name = json_data.getString("name"); Log.i("friend is", name); nText.setText(name); } catch (MalformedURLException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (FacebookError e) { e.printStackTrace(); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); facebook.authorizeCallback(requestCode, resultCode, data); } 

Intentó el método descrito por Manno23 y obtuvo

06-30 19:27:04.338: ERROR/AndroidRuntime(349): Caused by: java.lang.NullPointerException 06-30 19:27:04.338: ERROR/AndroidRuntime(349): at com.staffit.FacebookPage.getFriends(FacebookPage.java:67) 06-30 19:27:04.338: ERROR/AndroidRuntime(349): at com.staffit.FacebookPage.access$0(FacebookPage.java:55) 06-30 19:27:04.338: ERROR/AndroidRuntime(349): at com.staffit.FacebookPage$1.onComplete(FacebookPage.java:41) 06-30 19:27:04.338: ERROR/AndroidRuntime(349): at com.facebook.android.Facebook.authorizeCallback(Facebook.java:383) 06-30 19:27:04.338: ERROR/AndroidRuntime(349): at com.staffit.FacebookPage.onActivityResult(FacebookPage.java:93) 06-30 19:27:04.338: ERROR/AndroidRuntime(349): at android.app.Activity.dispatchActivityResult(Activity.java:3907) 06-30 19:27:04.338: ERROR/AndroidRuntime(349): at android.app.ActivityThread.deliverResults(ActivityThread.java:2492) 06-30 19:27:04.338: ERROR/AndroidRuntime(349): ... 11 more

3 Solutions collect form web for “Android Facebook Graph api información básica que solicita”

Ambas respuestas son correctas. Sólo puede poner el trozo de código que hace la solicitud en un método separado y llamar a ese método en onComplete (), es decir

 Facebook facebook = new Facebook("XXXXXasdasdajksdad"); TextView nText; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); nText = (TextView) this.findViewById(R.id.nameText); facebook.authorize(this, new String[] {"offline_access", "user_interests", "friends_interests"}, new DialogListener() { public void onComplete(Bundle values) { getFriends(); setContentView(R.layout.homepage); } public void onFacebookError(FacebookError error) {} public void onError(DialogError e) {} public void onCancel() {} }); } private void getFriends(){ JSONObject json_data = null; try { JSONObject response = Util.parseJson(facebook.request("me/friends")); // Get a friend information from facebook JSONArray jArray = response.getJSONArray("data"); json_data = jArray.getJSONObject(0); String name = json_data.getString("name"); Log.i("friend is", name); nText.setText(name); } catch (MalformedURLException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (FacebookError e) { e.printStackTrace(); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); facebook.authorizeCallback(requestCode, resultCode, data); } 

Hay mucho mal con esto, pero creo que lo primero y lo más importante para ti es comprender que la llamada a autorizar es asíncrona.

Esto significa que onComplete () se llama en un momento distante en el futuro. Sus solicitudes de facebook se producen "después" de la definición de devolución de llamada para onComplete () en el código, pero ver cómo es asíncrona esas llamadas van a pasar waaay antes de la red de solicitud de inicio de sesión de Facebook vuelve lo que significa que no tiene un token de autenticación Cuando usted hace esa petición.

* Debo agregar que DialogListener es una clase de connivence escrita por facebook para actuar como una forma de manejar devoluciones de llamada para llamadas asíncronas.

Simplemente llame a facebook.request("me/friends") desde dentro onComplete y deje que el resto de la lógica siga de eso.

De esa manera sólo se llamará una vez que el Facebook onject tiene un token de acceso y no si hay un error o algo así. Es probable que desee utilizar las otras devoluciones de llamada en el DialogListener para obtener un flujo mejor. También piensa en mantener ese objeto de facebook en toda la aplicación si planeas hacer más peticiones.

  • Subida de imagen multiparte de Android con HttpConnectionParams obsoleta en nueva API
  • Retrofit: Se esperaba BEGIN_OBJECT pero era BEGIN_ARRAY
  • Actualizar City Spinner con notifyDataSetChanged después de seleccionar estado
  • ¿Objeto raíz o no? ¿Cuál es la mejor práctica para las respuestas de la API?
  • Org.json.JSONException: Cadena no terminada en el carácter 1834
  • Alternativa del método Jsoup.parse ()
  • JSON.stringify en java - android
  • Valor de Json Parsing y Nullable int en android
  • Publicar datos de objetos de Json para obtener la respuesta de array de Json utilizando volley en android
  • Cómo utilizar parámetros con HttpPost
  • ¿Cómo puedo eliminar un elemento específico de un JSONArray?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.