使用带有Android SDK的Graph API将图片上传到Facebook

时间:2011-06-25 15:05:32

标签: java android facebook-graph-api

我正在尝试使用图形api将照片上传到Facebook并继续获取OutOfMemory异常。 上传的代码是:

private void PostPhoto(SessionHandler facebook, Uri photoUri)
{
    Bundle params = new Bundle();
    ByteArrayOutputStream bos = new ByteArrayOutputStream();

    String realPath = getRealPathFromURI(photoUri); 
    Bitmap bitmap = BitmapFactory.decodeFile(realPath);

    bitmap.compress(CompressFormat.JPEG, 100, bos);

    params.putByteArray("picture", bos.toByteArray());


    try
    {
        facebook.mFacebook.request("me/photos", params, "POST");            

    } catch (FileNotFoundException fileNotFoundException)
    {

    } catch (MalformedURLException malformedURLException)
    {

    } catch (IOException ioException)
    {

    }

}

异常会引发decodeFile函数,有时会在调用此行时在facebook SDK中引发:

return Util.openUrl(url, httpMethod, parameters);

在请求函数中。

该应用通过ACTION_SEND意图获取图片内容:// Uri。 getRealPathFromURI()用于将content:// uri转换为真正的SD卡路径。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

试试这个,它对我有用:

byte[] data = null;
try {
    ContentResolver cr = mainActivity.getContentResolver();
    InputStream fis = cr.openInputStream(photoUri);
    Bitmap bi = BitmapFactory.decodeStream(fis);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bi.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    data = baos.toByteArray();              
} catch (FileNotFoundException e) {
    e.printStackTrace();
}     
Bundle params = new Bundle(); 
params.putString("method", "photos.upload");          
params.putByteArray("picture", data);

这是使用Rest API,facebook sdk有调用它的方法,所以只需更改您的请求行:

facebook.mFacebook.request("me/photos", params, "POST");   

为:

facebook.mFacebook.request(params);   

希望这能解决问题。