Poster un message sur le mur facebook à partir d'android FB sdk toujours erreur
J'ai un problème avec FB sdk pour Android (téléchargé à partir de http://github.com/facebook/facebook-android-sdk ). essayé de poster un mur mais toujours obtenir une erreur (autorisation déjà définie et connectée à fb)
Voici l'extrait de code onClick fonction, j'ai fait de petites modifications sur leur exemple de code:
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 j'obtiens l'erreur suivante:
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 réponses
C'est vraiment bizarre... J'ai une application qui utilise la même syntaxe mais cela fonctionne très bien. Je viens de vérifier le code source du SDK FB et il semble qu'il ait beaucoup changé... j'ai trouvé ceci sur le SDK src:
for (String key : params.keySet()) {
if (params.getByteArray(key) != null) {
dataparams.putByteArray(key, params.getByteArray(key));
}
}
Donc, vous essayez de faire ceci:
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());
Le correctif est:
if (parameters.get(key) instanceof byte[]) {
Au Lieu de
if (parameters.getByteArray(key) != null) {
Sur la ligne 63 De Util.Java.
Et
if (params.get(key) instanceof byte[]) {
Au Lieu de
if (params.getByteArray(key) != null) {
Sur la ligne 155 de Util.Java.
Pour une raison étrange, sur Samsung Nexus S (peut-être d'autres appareils aussi), il renvoie une chaîne, pas un octet [].
Je pense que le message d'erreur est assez clair... "Key picture expected byte[] but value was a java.lang.String."
La valeur de la clé "image" dans votre Bundle params
devrait être un tableau d'octets, pas une chaîne.
Edit: N'a pas lu la réponse de Cristian. Je suis sûr que vous devriez transmettre les données d'image réelles, pas le nom de fichier en octets. Mais j'ai peut-être tort.
Un autre edit: Ouais, donc je baisserais ma propre réponse si je pouvais, mais il semble que je n'ai même pas lu la question correctement. L'erreur ne se produit pas seulement pour l'image, donc je n'ai pas idée de ce qui est faux...