Publicar mensaje en el muro de facebook de android fb sdk siempre error

Tengo un problema con fb sdk para Android (descargado de http://github.com/facebook/facebook-android-sdk ). Intenté publicar un muro, pero siempre recibo un error (el permiso ya está configurado y se ha iniciado sesión en fb)

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

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 me sale el siguiente error:

  09-16 18:55:28.372: WARN/Bundle(14392): Key picture expected byte[] but value was a java.lang.String. The default value  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  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  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) 

Eso es realmente extraño … Tengo una aplicación que usa la misma syntax pero funciona muy bien. Acabo de comprobar el código fuente del FB SDK y parece que ha cambiado mucho … Encontré esto en SDK src :

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

Entonces, 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 un String, 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 para la “imagen” clave en sus params Bundle debe ser una matriz de bytes, no una cadena.

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

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