21

Android用のfbsdkに問題があります(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)
4

3 に答える 3

46

修正は次のとおりです。

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

それ以外の

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

Util.java の 63 行目。

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

それ以外の

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

Util.java の 155 行目。

奇妙な理由で、Samsung Nexus S (おそらく他のデバイスも) では、バイト [] ではなく文字列を返します。

于 2010-10-13T20:02:27.597 に答える
10

それは本当に奇妙です...同じ構文を使用するアプリがありますが、非常にうまく機能します。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());
于 2010-09-16T12:19:57.677 に答える
0

エラーメッセージはかなり明確だと思います..."Key picture expected byte[] but value was a java.lang.String."

Bundle のキー「picture」の値はparams、文字列ではなくバイト配列にする必要があります。

編集:クリスチャンの答えを読みませんでした。バイト単位のファイル名ではなく、実際の画像データを渡す必要があると確信しています。しかし、私は間違っている可能性があります。

別の編集:ええ、できれば自分の答えに反対票を投じたいと思いますが、質問を正しく読んでいなかったようです。エラーは写真だけではないので、何が悪いのかわかりません...

于 2010-09-16T12:48:35.043 に答える