我正在尝试使用 graph 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 意图获取图片 content:// Uri。
getRealPathFromURI() 用于将 content:// uri 转换为真实的 sdcard 路径。
有任何想法吗?
试试这个,它对我有用:
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");
to:
facebook.mFacebook.request(params);
希望这能解决问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)