2010-09-16 37 views
21

Tôi gặp vấn đề với fb sdk cho Android (tải xuống từ http://github.com/facebook/facebook-android-sdk). Cố gắng để gửi bức tường nhưng luôn luôn nhận được lỗi (cho phép đã được thiết lập và đăng nhập vào fb)Đăng tin nhắn lên tường facebook từ android fb sdk luôn lỗi

đây là đoạn mã onClick chức năng, tôi đã thực hiện những thay đổi nhỏ trên mẫu mã của họ:

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

Từ DDMS tôi nhận được lỗi sau:

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) 

Trả lời

10

Thật lạ ... Tôi có một ứng dụng sử dụng cùng cú pháp nhưng hoạt động thực sự tốt. Tôi chỉ kiểm tra mã nguồn của SDK FB và có vẻ như nó đã thay đổi rất nhiều ... I found this on the SDK src:

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

Vì vậy, bạn cố gắng làm điều này:

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

Xin chào Christian, thanx cho câu trả lời của bạn. Mã thực sự hoạt động, phải mất một thời gian dài để xuất hiện trên bức tường fb của tôi, nhưng các thông điệp cảnh báo vẫn còn tồn tại. Bạn đã đúng, vấn đề là trong hoạt động đúc. nếu tôi đặt 'POST', các tham số phải trong mảng byte không có trong String. Đã cố gắng sử dụng mảng byte nhưng lỗi vẫn xuất hiện vì một tham số khác (đường dẫn đồ thị, mã thông báo vẫn còn trong chuỗi) –

+0

Xin chào Christian, tôi đang sử dụng mã này nhưng tôi không thể đăng hình ảnh lên tường facebook ... Tôi nhận được { "dữ liệu": []} trong phản ứng –

0

Tôi nghĩ rằng các thông báo lỗi khá rõ ràng ... "Key picture expected byte[] but value was a java.lang.String."

Giá trị cho "hình ảnh" chính trong Gói của bạn params phải là một mảng byte, không phải là Chuỗi.

chỉnh sửa: Không đọc câu trả lời của Cristian. Tôi khá chắc chắn bạn nên chuyển theo dữ liệu hình ảnh thực tế, không phải tên tệp theo byte. Nhưng tôi có thể sai.

chỉnh sửa khác: Vâng, vì vậy tôi sẽ downvote câu trả lời của riêng tôi nếu tôi có thể, nhưng có vẻ như tôi thậm chí không đọc câu hỏi đúng cách. Các lỗi xảy ra không chỉ cho hình ảnh, vì vậy tôi không có ý tưởng gì sai ...

+0

okay không có vấn đề, có vẻ như vấn đề là trong sdk. tôi sẽ cố gắng chỉnh sửa nó một cách thủ công ..xác cho câu trả lời của bạn benvd ... –

47

Việc sửa chữa là:

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

thay vì

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

trên dòng 63 của Util.java.

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

thay vì

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

trên đường dây 155 của Util.java.

Vì một số lý do lạ, trên Samsung Nexus S (có lẽ các thiết bị khác nữa), nó trả về một String chứ không phải byte [].

+0

Thêm cùng một vấn đề, những thay đổi này đã sửa nó – Vivi

+2

Tôi đã đi đến kết luận rất giống nhau. Mã của họ là vô nghĩa. – Snicolas

+0

cảm ơn ...nhận được ngay khi tôi thực hiện những thay đổi này cho SDK, tôi chỉ đăng url và văn bản .. – rahul

Các vấn đề liên quan