2010-09-16 9 views
21

J'ai un problème avec fb sdk pour Android (téléchargé de http://github.com/facebook/facebook-android-sdk). J'ai essayé de poster mur, mais toujours obtenir erreur (autorisation déjà défini et connecté pour fb)Poster un message sur le mur facebook de android fb sdk toujours erreur

ici est l'extrait de code fonction onClick, je l'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 je reçois 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) 

Répondre

10

C'est vraiment bizarre ... J'ai une application qui utilise la même syntaxe mais ça marche très bien. Je vérifie que le code source du SDK de FB et il semble qu'il a beaucoup changé ... I found this on the SDK src:

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

Donc, vous essayez de le faire:

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()); 
+0

Salut Christian, merci pour votre réponse. Le code fonctionne réellement, il a fallu beaucoup de temps pour apparaître sur mon mur fb, mais les messages d'avertissement existent toujours. Vous avez raison, le problème était dans l'opération de moulage. si je mets 'POST', les paramètres doivent dans le tableau d'octets pas dans la chaîne. J'ai essayé d'utiliser tableau byte mais les erreurs apparaissent toujours car un autre paramètre (chemin de graphe, clé de jeton toujours dans la chaîne) –

+0

Bonjour Christian, j'utilise ce code mais je suis incapable de poster l'image sur facebook mur ... Je reçois { "données": []} dans la réponse –

0

Je pense que le message d'erreur est tout à fait clair ...

La valeur de la clé "image" dans votre ensemble 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 je peux me tromper.

un autre edit: Oui, donc je downvote ma propre réponse si je pouvais, mais il semble que je n'ai même pas lu la question correctement. L'erreur se produit pas seulement pour l'image, donc je ne sais pas ce qui ne va pas ...

+0

okay pas de problème, il semble que le problème était en sdk. Je vais essayer de l'éditer manuellement .. merci pour votre réponse benvd ... –

47

Le correctif est:

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

au lieu de

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

sur la ligne 63 du 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 [].

+0

Ajouter le même problème, ces changements l'ont corrigé – Vivi

+2

Je suis arrivé à la même conclusion. Leur code est un non-sens. – Snicolas

+0

merci ...J'ai bien compris quand j'ai fait ces changements au SDK, je ne publiais que l'url et un texte .. – rahul

Questions connexes