2012-01-11 91 views
1

我有問題,以圖片牆壁使用Facebook SDK。以下是我的代碼。在活動的開始Android無法將圖片張貼到牆上使用Facebook sdk

Facebook的權限對話框:

fb = new Facebook(fb_id); 

fb.authorize(this, new String[] { "publish_stream", 
       "read_stream", "offline_access","read_friendlists"}, new DialogListener(){ 

public void onComplete(Bundle values) { 
    Log.e("oncomplete","value"); 
    if (values.isEmpty()) { 
     Log.e("oncomplete","value is empty"); 
     return; 
    } 
    if (!values.containsKey("POST")) { 
     token = fb.getAccessToken(); 
    } 
} 
public void onFacebookError(FacebookError e) {} 
public void onError(DialogError e){}  
public void onCancel() {} 
}); 

在按鈕的點擊發送料牆

public void onClick(View v){ 
if(v==post_to_wall){ 
Toast.makeText(getApplicationContext(), "fb token " + token, Toast.LENGTH_LONG).show(); 
final Handler handler = new Handler(){ 
     public void handleMessage(Message what){ 
      finish(); 
     } 
    }; 
    Thread thread = new Thread(){ 
     public void run(){ 
      publishToFriendsWall(friends_id); 
      handler.sendEmptyMessage(0); 
     } 
    }; 
    thread.start();    
    } 
} 

發佈到留言板方法

public void publishToFriendsWall(String friends_id){ 
     if(fb.isSessionValid()){ 
     try{         
      Bundle params = new Bundle(); 
      params.putString(Facebook.TOKEN, token); 
       params.putString("message", edittext.getText().toString()); 
       params.putString("link", "http://www.mysite.com"); 
      params.putString("caption", "my caption"); 
      params.putString("description", "description of my link. Click the link to find out more."); 
      params.putString("name", "my name"); 
      //params.putString("picture", "mypic url"); 

      fb.request(((friends_id == null) ? "me" : friends_id) + "/feed", params, "POST"); 
     }catch(Exception e){ 
      Log.d(null, "Fb post to wall error occured " + e.getClass().getName()); 
     }    
    } 
    } 

的問題是,當我把下面的代碼

params.putString("picture", "mypic url"); 

那裏沒有任何內容發佈到牆上,如果我評論上面的代碼它工作正常,我通過Facebook圖表api文檔閱讀張貼圖片它是需要訪問令牌和有效的圖片的網址。我通過獲取訪問令牌完成了所有這些工作,並且URL是有效的。我的代碼有什麼問題?也沒有發現錯誤。我在logcat中唯一得到的警告一樣

Key picture expected byte[] but value was a java.lang.String. the default value <null> was return 
Attempt to cast generated internal exception: 
java.lang.ClassCastException: java.lang.String 
    at android.os.Bundle.getByteArray(Bundle.java:1305) 
    at com.facebook.android.Util.encodePostBody(Util.java:63) 
    at com.facebook.android.Util.openUrl(Util.java:182) 
    at com.facebook.android.Facebook.request(Facebook.java:563) 
+0

實際上圖片應該是字節類型,但是你試圖在那裏使用一個字符串? – 2012-01-11 04:41:19

+0

是一個字符串,但在類型的網址,因爲大多數在網絡上的例子,他們把圖片的網址。來自http://developers.facebook.com/docs/reference/api/post/的圖形路徑api文檔也聲明它需要有效的字符串url。 – Zahary 2012-01-11 05:05:17

回答

0
mFacebook.setAccessToken(access_token); 
    boolean validity=mFacebook.isSessionValid(); 

    try 
    { 
    byte[] data = null; 

    BitmapFactory.Options opts = new BitmapFactory.Options(); 

    opts.inSampleSize=4;   
    Bitmap bi = BitmapFactory.decodeFile(st_imagepath,opts); 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bi.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
    data = baos.toByteArray(); 


     Bundle params = new Bundle(); 
     params.putString(Facebook.TOKEN, mFacebook.getAccessToken()); 
     params.putString("method", "photos.upload"); 
     params.putString("caption", caption); 



     params.putByteArray("picture", data); 

     AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(mFacebook); 

     mAsyncRunner.request(null, params, "POST", new SampleUploadListener(), null); 

使用該工作代碼。烏爾的問題將得到解決