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.

  • Serializador personalizado - deserializador utilizando GSON para una lista de BasicNameValuePairs
  • Servicio web SOAP y JSON responce en android
  • Llame a la variable de tipo de referencia WCF
  • El análisis de Json con gson devuelve un objeto nulo
  • Retrofit 2.0 + RxJava + Error JSON cuerpo
  • Interfaz de importación json de Java para Android / Java
  • Determine si JSON es un JSONObject o JSONArray
  • ¿JSON en un campo del sqlite?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.