使用带有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);
并希望这将解决问题。