2012-05-09 172 views
2

是否可以在朋友的牆上發佈圖片? 我使用這個代碼:在朋友的牆上張貼照片?

Bundle postdata = new Bundle(); 
postdata.putString("message", msg); 
postdata.putByteArray("picture", pic); 
// this code, i found it in another questions but it doesn't 
// seem to help much: 
postdata.putString("target_id", usr); 
// then i use the Asynchronous request. 
mAsyncRunner.request(usr+"/feed", postdata, "POST",new WallRequestListener(), null); 

其中pic是圖片爲ByteArray和usr是朋友的ID。 它只是在朋友的牆上顯示消息,但根本沒有圖片。

回答

0

按照documentation的圖片設置參數的名稱是不是「圖片報」「源」

所以,你的代碼應該是:

Bundle postdata = new Bundle(); 

postdata.putString("message", msg); 
postdata.putByteArray("source", pic); 

mAsyncRunner.request(usr + "/feed", postdata, "POST", new WallRequestListener(), null); 
+0

似乎沒有更好的工作,我得到了同樣的結果。 – Slacker616

+0

等待,您正試圖張貼到用戶供稿,該路徑不期望圖片。如果您檢查[文檔](http://developers.facebook.com/docs/reference/api/user/#posts),您會看到「圖片」參數是一個字符串。你想做什麼?張貼圖片到牆上的照片? –

+0

是的,其實我使用第一個代碼與「圖片」參數上傳圖片到用戶的牆上,但我這樣做獲得牆專輯ID,但現在我想張貼在用戶的朋友牆上的圖片。 – Slacker616

1

這是我在我的應用程序使用。它的工作原理。

protected void uploadPhoto() { 
    if (!Utility.mFacebook.isSessionValid()) { 
     Util.showAlert(this, "Warning", "You must first log in."); 
    } else { 
     if (targetUri != null) { 
      Bundle params = new Bundle(); 
      try { 
       params.putByteArray("photo", Utility.scaleImage(getApplicationContext(), targetUri)); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      params.putString("caption", txtPhotoCaption.getText().toString()); 
      Utility.mAsyncRunner.request("replace this with the users ID"+ "/photos&access_token=" + Utility.mFacebook.getAccessToken(), 
        params, "POST", new PhotoUploadListener(), null); 
      txtPhotoCaption.setText(""); 
      Toast.makeText(getApplicationContext(), "Photo uploaded successfully", Toast.LENGTH_SHORT).show(); 
      this.finish(); 
     } 
    } 
} 

請注意,我使用的是與示例應用程序中使用的方法相同的方法。沒有考慮縮放或不縮放圖像的優點或缺點。正在從EditText中拉取「標題」屬性。實際圖像位於「targetUri」字段中,該字段被聲明爲全局變量。它使用設備上的默認圖庫獲取圖像。爲了完整起見,這是從默認圖庫應用程序獲取圖像的代碼。 (此提示用戶選擇應用程序)

btnAddPhoto.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(Intent.ACTION_PICK, 
         android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       startActivityForResult(intent, 0); 
      } 
     }); 

而且它在onActivityResult()這裏處理:

注意我也設置所選圖像中的ImageView作爲預覽到登錄的用戶

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     super.onActivityResult(requestCode, resultCode, data); 

     Bitmap bitmap = null; 
     if (resultCode == RESULT_OK) { 
      targetUri = data.getData(); 
      Log.e("IMG URI", targetUri.toString()); 
      try { 
       bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri)); 
       try { 
        Utility.scaleImage(getApplicationContext(), targetUri); 
        imgDisplaySelectedImage.setImageBitmap(bitmap); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

我再次測試上傳到朋友牆之前,我在這裏發佈的代碼作爲一個答案。它真的有用。希望這對你也有幫助。

編輯:

在最新的評論中提到,使用Intent.ACTION_GET_CONTENT沒有發揮與onActivityResult下的預覽圖像的顯示漂亮的()。修改代碼有點奏效。

我覺得奇怪的是,在「完成操作使用」彈出窗口中,我沒有獲得我的Galaxy S上的Astro文件管理器和畫廊。它給了我文件管理器(離開市場,而不是股票)和Quickoffice Pro。這就是說,從兩個仍然作品和照片的選擇仍然上傳。

+0

謝謝,我會試試看,並讓你知道。 – Slacker616

+0

當然可以。只要從上面的代碼中取得正確的部分,它應該是好的。 –

+0

非常感謝你的隊友。我只需要改變這一行:「usrID/photos&access_token =」我使用的是「usrID/feed」。 – Slacker616

相關問題