2015-04-03 11 views
7

Ich versuche ein Foto mit den neuen SharePhoto & SharePhotoContent-Klassen im neuen SDK zu teilen. Ich möchte eine Bild-URL anstelle eines lokal gespeicherten Bildes verwenden.Android Bild-URL mit Facebook teilen SharePhotoContent

Ich bin in der Lage, ein Bild mit einer lokal gespeicherten ziehbar Ressource zu teilen:

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

Aber wenn ich versuche, eine Bild-URL zu verwenden:

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

alles, was ich sehe, ist ein leere Post im Facebook shareDialog.

Hat jemand anderes dies versucht und es zur Arbeit gebracht?

Vielen Dank!

+0

Interessant, wenn ich Ihren genauen Code verwenden, um ein SharePhoto zu erstellen, sehe ich stattdessen diesen Fehler: http://i.imgur.com/O7TFGsM.jpg. Bist du sicher, dass die Uri.parse dir einen nicht-null Uri zurückgibt? Manchmal schlägt die Uri.parse() -Methode automatisch fehl und gibt Ihnen nur eine Null. –

+0

@MingLi Ich habe diese Fehlermeldung während des Tests überhaupt nicht gesehen. Und ich bin sicher, dass der Uri nicht null ist. –

+0

Verwenden Sie diese genaue URL in Ihrem Beitrag oben? Wenn ja, dann solltest du einen Bug auf https://developers.facebook.com/bugs mit einer kleinen Beispiel-App als Zip einreichen, dann können wir uns ansehen, was passiert. –

Antwort

1

Wenn Sie Link anstelle von lokalen Bild verwenden, müssen Sie ShareDialog statt SharePhoto, Vom doc

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

Also kann ich nicht einfach eine URL verwenden, um ein Foto einfach wie mit einer Bitmap anzuzeigen? Und wenn nicht, was ist dann der Sinn der 'setImageUrl'-Funktion im SharePhoto-Modell? –

+0

Können Sie es mit SharePhoto.Builder() versuchen? Photo = new SharePhoto.Builder() –

+0

Ja, ich habe es versucht. Es ist in meiner Frage –

1

verwenden Wenn Sie eine URL eines Bildes teilen möchten, dann sollten Sie sharelinkcontent verwenden: dies ist mein Code und es funktioniert, aber ohne einen Titel oder eine Beschreibung nur die Bild-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

Was ich tat, war das Bild herunterladen und die Bitmap vom Server erhalten und dann auf FB schreiben:

@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

Ja, genau das habe ich auch gemacht –