Опубликовать сообщение на стене Facebook от Android FB SDK всегда ошибка - PullRequest
21 голосов
/ 16 сентября 2010

У меня проблема с fb sdk для Android (скачано с http://github.com/facebook/facebook-android-sdk). Попытка опубликовать стену, но всегда получаю сообщение об ошибке (разрешение уже установлено и авторизовано на fb)

Вот функция фрагмента кода onClick, я внес небольшие изменения в их пример кода:

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

Из DDMS я получаю следующую ошибку:

    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 ]

47 голосов
/ 14 октября 2010

Исправление:

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

вместо

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

в строке 63 Util.java.

И

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

вместо

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

в строке 155 Util.java.

По какой-то странной причине на Samsung Nexus S (возможно, и на других устройствах) он возвращает строку, а не байт [].

10 голосов
/ 16 сентября 2010

Это действительно странно ... У меня есть приложение, которое использует тот же синтаксис, но работает очень хорошо.Я просто проверяю исходный код FB SDK, и кажется, что он сильно изменился ... Я нашел это на SDK src :

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

Итак, вы пытаетесь сделатьэто:

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 голосов
/ 16 сентября 2010

Я думаю, что сообщение об ошибке совершенно ясно ... "Key picture expected byte[] but value was a java.lang.String."

Значением ключа "picture" в вашем комплекте params должен быть байтовый массив, а не строка.

редактировать: не читал ответ Кристиана.Я почти уверен, что вы должны передавать фактические данные изображения, а не имя файла в байтах.Но я могу ошибаться.

другое редактирование: Да, поэтому я бы понизил свой ответ, если смогу, но, похоже, я даже не прочитал вопрос должным образом.Ошибка происходит не только для изображения, поэтому я понятия не имею, что не так ...

...