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

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

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) { } } 

这个exception会引发decodeFile函数,有时会在调用此行时在facebook SDK中引发:

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

在请求函数内部。

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

有任何想法吗?

试试这个,它对我有用:

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

并希望这将解决问题。