gpt4 book ai didi

java - ParseFile 的图像 URL?

转载 作者:搜寻专家 更新时间:2023-11-01 08:37:49 26 4
gpt4 key购买 nike

我有一个 Parse Android 应用程序,我正在为其实现 Facebook 注册。目前我坚持抓取图像以设置为新 ParseUser 的个人资料图片。我已经成功地使用 Facebook Graph API 检索了正确的 URL(我已经通过将其插入浏览器进行了检查,在浏览器中显示了正确的个人资料图片),但我现在需要一种方法将该 URL 转换为字节数组( byte[]) 这样我就可以保存我们的 ParseUser 个人资料图片的 ParseFile 字段。我已经看过所有这些 SO 问题:

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。但是,应用程序中没有加载个人资料图片,当我单击以检查仪表板中的文件时,我收到此错误消息:

The file “tfss-0280f98d-7180-4528-9d24-3ec47d3b25d4-image.jpg” could not be opened because it is empty.

老实说,我很茫然。与实现 Facebook 登录的任何其他部分相比,我在这张照片问题上花费的时间要多得多。而且我们数据库的设置方式,创建另一个字段来保存URL并用Picasso加载确实不太理想。非常感谢任何对此问题的帮助!

最佳答案

像这样直接将您的图像文件保存为个人资料图片:

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

关于java - ParseFile 的图像 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35279685/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com