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)
21
demandé sur Kara 2010-09-16 16:01:13

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());
10
répondu Cristian 2010-09-16 12:19:57

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 [].

47
répondu Chris Banes 2012-04-09 22:07:24

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...

0
répondu benvd 2010-09-16 14:10:26