Сообщение для facebook wall from android fb sdk всегда ошибка
У меня проблема с 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)
Ответы
Ответ 1
Это действительно странно... У меня есть приложение, которое использует тот же синтаксис, но он работает очень хорошо. Я просто проверяю исходный код 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());
Ответ 2
Исправление:
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 (возможно, и на других устройствах), он возвращает строку, а не байт [].
Ответ 3
Я думаю, что сообщение об ошибке довольно ясно... "Key picture expected byte[] but value was a java.lang.String."
Значение для ключевого "изображения" в вашем Bundle params
должно быть байтовым массивом, а не строкой.
edit: Не читал Кристиан ответ. Я уверен, что вы должны передать фактические данные изображения, а не имя файла в байтах. Но я мог ошибаться.
другое редактирование: Да, поэтому я мог бы утвердить свой собственный ответ, если мог, но, похоже, я даже не прочитал вопрос правильно. Ошибка происходит не только для изображения, поэтому я не знаю, что неправильно...