Publicar un mensaje en la pared de facebook de android fb sdk always error

Tengo problema con fb sdk para Android (descargado de http://github.com/facebook/facebook-android-sdk ). Intentado fijar la pared pero consigue siempre el error (permiso ya fijado y registrado en fb)

Aquí está la función onClick del fragmento de código, hice pequeñas modificaciones en su código de ejemplo:

Bundle params = new Bundle(); params.putString("message", "Test"); params.putString("name", "American Virgin"); params.putString("link", "http://bit.ly/12345"); params.putString("description", "A Freshman College Girl on a scholarship from an ..."); params.putString("picture", "http://xxx/MOV1026.jpg"); mAsyncRunner.request("me/feed", params, "POST", new TestRequestListener()); 

De DDMS consigo el error siguiente:

  09-16 18:55:28.372: WARN/Bundle(14392): Key picture expected byte[] but value was a java.lang.String. The default value <null> was returned. 09-16 18:55:28.414: WARN/Bundle(14392): Attempt to cast generated internal exception: 09-16 18:55:28.414: WARN/Bundle(14392): java.lang.ClassCastException: java.lang.String 09-16 18:55:28.414: WARN/Bundle(14392): at android.os.Bundle.getByteArray(Bundle.java:1220) 09-16 18:55:28.414: WARN/Bundle(14392): at com.facebook.android.Util.openUrl(Util.java:153) 09-16 18:55:28.414: WARN/Bundle(14392): at com.facebook.android.Facebook.request(Facebook.java:295) 09-16 18:55:28.414: WARN/Bundle(14392): at com.facebook.android.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:209) 09-16 18:55:28.422: WARN/Bundle(14392): Key message expected byte[] but value was a java.lang.String. The default value <null> was returned. 09-16 18:55:28.432: WARN/Bundle(14392): Attempt to cast generated internal exception: 09-16 18:55:28.432: WARN/Bundle(14392): java.lang.ClassCastException: java.lang.String 09-16 18:55:28.432: WARN/Bundle(14392): at android.os.Bundle.getByteArray(Bundle.java:1220) 09-16 18:55:28.432: WARN/Bundle(14392): at com.facebook.android.Util.openUrl(Util.java:153) 09-16 18:55:28.432: WARN/Bundle(14392): at com.facebook.android.Facebook.request(Facebook.java:295) 09-16 18:55:28.432: WARN/Bundle(14392): at com.facebook.android.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:209) 09-16 18:55:28.452: WARN/Bundle(14392): Key format expected byte[] but value was a java.lang.String. The default value <null> was returned. 09-16 18:55:28.472: WARN/Bundle(14392): Attempt to cast generated internal exception: 09-16 18:55:28.472: WARN/Bundle(14392): java.lang.ClassCastException: java.lang.String 09-16 18:55:28.472: WARN/Bundle(14392): at android.os.Bundle.getByteArray(Bundle.java:1220) 09-16 18:55:28.472: WARN/Bundle(14392): at com.facebook.android.Util.openUrl(Util.java:153) 09-16 18:55:28.472: WARN/Bundle(14392): at com.facebook.android.Facebook.request(Facebook.java:295) 09-16 18:55:28.472: WARN/Bundle(14392): at com.facebook.android.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:209) 

    3 Solutions collect form web for “Publicar un mensaje en la pared de facebook de android fb sdk always error”

    Eso es realmente raro … Tengo una aplicación que utiliza la misma sintaxis, pero funciona muy bien. Acabo de comprobar el código fuente del SDK FB y parece que ha cambiado mucho … He encontrado esto en el SDK src :

      for (String key : params.keySet()) { if (params.getByteArray(key) != null) { dataparams.putByteArray(key, params.getByteArray(key)); } } 

    Por lo tanto, intenta hacer esto:

     Bundle params = new Bundle(); params.putByteArray("message", "Test".getBytes()); params.putByteArray("name", "American Virgin".getBytes()); params.putByteArray("link", "http://bit.ly/12345".getBytes()); params.putByteArray("description", "A Freshman College Girl on a scholarship from an ...".getBytes()); params.putByteArray("picture", "http://xxx/MOV1026.jpg".getBytes()); mAsyncRunner.request("me/feed", params, "POST", new TestRequestListener()); 

    La solución es:

     if (parameters.get(key) instanceof byte[]) { 

    en lugar de

     if (parameters.getByteArray(key) != null) { 

    En la línea 63 de Util.java.

    Y

     if (params.get(key) instanceof byte[]) { 

    en lugar de

     if (params.getByteArray(key) != null) { 

    En la línea 155 de Util.java.

    Por alguna extraña razón, en Samsung Nexus S (quizás otros dispositivos también) devuelve una cadena, no un byte [].

    Creo que el mensaje de error es bastante claro … "Key picture expected byte[] but value was a java.lang.String."

    El valor de la "imagen" clave en los params Bundle debe ser una matriz de bytes, no una cadena.

    No leí la respuesta de Cristian. Estoy bastante seguro de que debe pasar a lo largo de los datos de la imagen real, no el nombre de archivo en bytes. Pero podría estar equivocado.

    Otra edición: Sí, así que yo downvote mi propia respuesta si pudiera, pero parece que ni siquiera leer la pregunta correctamente. El error no sucede sólo para la imagen, así que no tengo idea de lo que está mal …

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.