2015-04-03 173 views
7

我試圖在新SDK中使用Facebook的新SharePhoto分享照片& SharePhotoContent類。 我想使用圖片網址而不是本地存儲的圖片。Android分享圖片網址Facebook SharePhotoContent

我能夠使用本地存儲的繪製資源共享的圖像:

Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.carrots); 

SharePhoto photo = new SharePhoto.Builder() 
        .setImageBitmap(image) 
        .build(); 

SharePhotoContent content = new SharePhotoContent.Builder() 
           .addPhoto(photo) 
           .build(); 

shareDialog.show(content); 

但是當我嘗試使用圖片網址:

SharePhoto photo = new SharePhoto.Builder() 
         .setImageUrl(Uri.parse("http://s3-ak.buzzfed.com/static/images/public/verticals/food-title.png?v=201504021353")) 
         .build(); 

所有我看到的是一個空白張貼在Facebook shareDialog中。

有沒有其他人試過這個,並得到它的工作?

非常感謝!

+0

有趣的是,當我使用您的確切代碼來創建SharePhoto時,我看到這個錯誤:http://i.imgur.com/O7TFGsM.jpg。你確定Uri.parse實際上是給你一個非空Uri嗎?有時候,Uri.parse()方法會默默地失敗,只是給你一個null。 – 2015-04-03 19:56:02

+0

@MingLi我在測試過程中根本沒有看到這個錯誤信息。我確信Uri是非空的。 – 2015-04-03 20:18:43

+0

你在上面的帖子中使用了確切的網址嗎?如果是這樣,那麼你應該在https://developers.facebook.com/bugs上用一個小樣本應用程序作爲zip文件提交bug,然後我們可以看看發生了什麼。 – 2015-04-03 22:24:42

回答

1

如果您使用的鏈接,而不是當地的形象,你如果你希望共享的圖像的URL中使用ShareDialog代替SharePhoto,從doc

ShareLinkContent linkContent = new ShareLinkContent.Builder() 
     .setContentTitle("title") 
     .setContentDescription("description") 
     .setContentUrl(Uri.parse("your link")) 
     .build(); 
+0

因此,我不能只使用一個URL來顯示一張像它與位圖一樣的照片?如果不是,那麼SharePhoto模型中的'setImageUrl'函數有什麼意義? – 2015-04-03 05:41:01

+0

你可以試試SharePhoto.Builder()photo = new SharePhoto.Builder() – 2015-04-03 06:00:53

+0

是的,我試過了。這是在我的問題 – 2015-04-03 06:17:09

1

,那麼你應該使用sharelinkcontent:這是我的代碼,它的工作,但沒有一個標題或描述只是圖像URL

ShareLinkContent linkContent = new ShareLinkContent.Builder() 
      .setContentTitle("Shared from nearbyme application") 
      .setContentDescription("This is a wonderful place") 
      .setContentUrl(Uri.parse("http://www.villathena.com/images/nearby/thumbs/le-bus-bleu-private-tours.jpg")) 
      .setImageUrl(Uri.parse("http://www.villathena.com/images/nearby/thumbs/le-bus-bleu-private-tours.jpg")) 
      .build(); 
     shareDialog.show(content); 
1

我確實是下載圖片,並從服務器獲取的位圖,然後發佈到FB:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    FacebookSdk.sdkInitialize(getApplicationContext()); 

    Button btn = (Button)findViewById(R.id.btn_share); 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      getImage(); 
     } 
    }); 
} 

private void getImage(){ 
    new DownloadImgTask().execute("http://url.com/1.jpg"); 
} 

private void postFB(Bitmap bm){ 
    SharePhoto photo = new SharePhoto.Builder().setBitmap(bm).build(); 
    SharePhotoContent content = new SharePhotoContent.Builder().addPhoto(photo).build(); 
    ShareDialog dialog = new ShareDialog(this); 
    if (dialog.canShow(SharePhotoContent.class)){ 
     dialog.show(content); 
    } 
    else{ 
     Log.d("Activity", "you cannot share photos :("); 
    } 

} 

private class DownloadImgTask extends AsyncTask<String, Void, Bitmap>{ 

    protected Bitmap doInBackground(String... urls) { 
     String urldisplay = urls[0]; 
     Bitmap bm = null; 
     try { 
      InputStream in = new java.net.URL(urldisplay).openStream(); 
      bm = BitmapFactory.decodeStream(in); 
     } catch (Exception e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
     return bm; 
    } 

    protected void onPostExecute(Bitmap result) { 
     postFB(result); 
    } 
} 
+0

是的,這也是我最終做的 – 2015-04-28 03:51:14