我有一个Parse Android应用程序,我正在实施Facebook注册。目前我被困在抓取图像设置为新ParseUser的个人资料图片。我已成功使用Facebook Graph API来检索正确的URL(我已通过将其插入浏览器进行检查,我在其中显示了正确的个人资料图片),但我现在需要一种方法将该URL转换为字节数组( byte [])这样我就可以保存ParseUser的个人资料图片的ParseFile字段。我已经看过所有这些问题:
•java.net.URL read stream to byte[]
•Efficiently read file from URL into byte[] in Java
•Get image with given url and convert it to byte array
这些都没有奏效。我目前正在尝试使用Apache IOutils,就像在第二个链接的解决方案中一样。这是我当前的AsyncTask代码:
private class SetProfPicWithURL extends AsyncTask<URL, Integer, byte[]> {
@Override
protected byte[] doInBackground(URL... imageURL) {
Log.i("SetProfPicWithURL", "invocation, URL: " + imageURL[0]);
InputStream is = null;
byte[] bytes = null;
try {
is = imageURL[0].openStream();
bytes = IOUtils.toByteArray(is);
} catch (IOException e) {
e.printStackTrace();
}
finally {
if (is != null) try {
is.close();
if(bytes == null){Log.e("LoginActivity", "bytes is null int SetProfPicWithURL");}
final ParseFile imageFile = new ParseFile("image.jpg", bytes);
imageFile.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
Log.i("LoginActivity", "getCurrentUser.put");
ParseUser.getCurrentUser().put(ParseUtils.PARSE_PROFILE_IMAGE, imageFile);
ParseUser.getCurrentUser().saveInBackground();
} else {
e.printStackTrace();
}
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
return bytes;
}
}
现在,当执行此代码时,我没有得到错误日志,并且创建了ParseFile。但是,应用程序中没有加载配置文件图片,当我单击以检查仪表板中的文件时,我收到以下错误消息:
老实说,我很茫然。我在这一个照片问题上花费的时间远远超过实施Facebook登录的任何其他部分。而且我们的数据库设置方式,创建另一个字段以保存URL并加载Picasso实际上并不理想。对此问题的任何帮助都非常感谢!文件“tfss-0280f98d-7180-4528-9d24-3ec47d3b25d4-image.jpg”可以 不要打开,因为它是空的。
答案 0 :(得分:3)
将图片文件直接保存为个人资料图片,如下所示:
final ParseFile imageFile = new ParseFile("image.jpg", bytes);
ParseUser.getCurrentUser().put(ParseUtils.PARSE_PROFILE_IMAGE, imageFile);
ParseUser.getCurrentUser().saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
Log.i("LoginActivity", "Profile saved succesfully");
} else {
e.printStackTrace();
}
}
});
编辑:
使用此命令从url获取图像字节数组。
try {
java.net.URL img_value = new java.net.URL(imageURL);
Bitmap mIcon = BitmapFactory
.decodeStream(img_value.openConnection()
.getInputStream());
if (mIcon != null)
imgByteArray = encodeToByteArray(mIcon);
} catch (Exception e) {
e.printStackTrace();
}
public byte[] encodeToByteArray(Bitmap image) {
Log.d(TAG, "encodeToByteArray");
Bitmap b= image;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] imgByteArray = baos.toByteArray();
return imgByteArray ;
}