2011-06-25 81 views
1

我正尝试使用图形api将照片上载到Facebook,并继续获取OutOfMemory异常。 对上传的代码是这样的:使用Android API使用Graph API将图片上传到Facebook

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

你能显示错误的堆栈跟踪吗? – Kenny

回答

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

并希望这将解决问题。

+0

看起来像这样的代码没有得到内存不足的异常。该代码确实到达RequestListener的onComplete,但图片不显示在Facebook中。试图将请求中的null更改为“我/照片”,并且在配置文件或相册中仍然没有任何内容。 – Idan

+1

@Idan - 你可以发布你从facebook获得的回复 – Kenny

+0

回复:不支持的方法,photos.upload – Idan

相关问题