1

可能重复:
如何使用图形 api 将图像发布到 facebook 墙上

我正在使用 Graph API 在 Facebook 墙上发帖。

strpostimageurl=/mnt/sdcard/DCIM/mnt/sdcard/DCIM/Camera1354795516555.jpg

String res = UrltoValue.getValuefromUrl("https://graph.facebook.com/"+Login.facebookid+"/feed?access_token="+accesstoken+"&method="+"post"+"&message="+"hi"+"&link="+strpostimageurl);

我收到错误请求作为回应。

是否可以为发布图像提供 SD 卡路径?我只有对象的位图,所以我用那个位图创建了文件,我正在使用它。

而且我需要在多个朋友墙上发帖,所以我更喜欢使用 Graph API。

4

1 回答 1

0

您收到错误请求错误是因为您将错误的值传递给 Facebook API。

首先,如果您通过链接或 URL 上传图片/照片,则必须使用“源”标签,而不是代码中的“链接”标签。

其次,如果您要解决上述问题,我怀疑代码是否可以正常工作,因为您strpostimageurl实际上没有有效的 URL。

第三,因为它不是一个有效的 URL,所以不能使用"source"标签。您将需要使用这样的东西:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmpImageGallery.compress(CompressFormat.JPEG, 100, baos);

Bundle postImgGallery = new Bundle();

// ADD THE PHOTO DATA TO THE BUNDLE
postImgGallery.putByteArray("photo", baos.toByteArray());

// ADD THE CAPTION FROM THE STRING finalStatusMessage TO THE BUNDLE
if (finalStatusMessage.equals(""))  {
    /*****  DO NOTHING HERE     *****/
} else {
    postImgGallery.putString("caption", finalStatusMessage);
}

mAsyncRunner.request("me/photos", postImgGallery, "POST", new PhotoUploadListener(), null);

这里,

  1. mAsyncRunnerAsyncFacebookRunner Class是Facebook SDK 的一部分的一个实例。
  2. bmpImageGallery是一个实例,Bitmap其中存储了用户选择的图像。它使用以下方法从图库中获取用户选择的图像:

这是在打开画廊并让用户从中选择照片/图像的OnClick事件上运行的代码:Button

Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, reqcdGalleryImage);

然后,使用该onActivityResult()方法,将所选图像传递给前面代码中使用的Bitmap实例:bmpImageGallery

bmpImageGallery = MediaStore.Images.Media.getBitmap(this.getContentResolver(), targetURI);

编辑:

然后试试这个(OnClick):

Intent getCameraImage = new Intent("android.media.action.IMAGE_CAPTURE");

File cameraFolder;

if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
    cameraFolder = new File(android.os.Environment.getExternalStorageDirectory(),"give_a_folder_name/camera");
else
    cameraFolder= StatusUpdate.this.getCacheDir();
if(!cameraFolder.exists())
    cameraFolder.mkdirs();

File photo = new File(Environment.getExternalStorageDirectory(), "give_a_folder_name/camera/camera_snap.jpg");
getCameraImage.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
initialURI = Uri.fromFile(photo);

startActivityForResult(getCameraImage, 2);

在这个onActivityResult()

targetURI = initialURI;
getContentResolver().notifyChange(targetURI, null);

ContentResolver cr = getContentResolver();

try {

    // SET THE IMAGE FROM THE CAMERA TO THE IMAGEVIEW
    bmpImageCamera = android.provider.MediaStore.Images.Media.getBitmap(cr, targetURI);

    // SET THE IMAGE FROM THE GALLERY TO THE IMAGEVIEW
    imgvwSelectedImage.setImageBitmap(bmpImageCamera);

} catch (Exception e) {
    e.printStackTrace();
}

targetURI 和 initialURI 是全局声明的 Uri 实例

于 2012-12-06T12:55:04.517 回答