Android( http://github.com/facebook/facebook-Android-sdk からダウンロード)のfb 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)
それは本当に奇妙です...私は同じ構文を使用するアプリを持っていますが、それは本当にうまく機能します。 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());
修正は次のとおりです。
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(おそらく他のデバイスも)では、byte []ではなくStringを返します。
エラーメッセージは非常に明確だと思います..."Key picture expected byte[] but value was a Java.lang.String."
バンドルparams
のキー「picture」の値は、文字列ではなくバイト配列である必要があります。
編集:クリスチャンの答えを読んでいませんでした。ファイル名をバイト単位で渡すのではなく、実際の画像データを渡す必要があると確信しています。しかし、私は間違っている可能性があります。
別の編集:ええ、できれば自分の答えに反対票を投じますが、質問を正しく読んでさえいないようです。エラーは画像だけでなく発生するので、何が問題なのかわかりません...