ParseFile的图片网址?

时间:2016-02-08 21:28:42

标签: java android facebook facebook-graph-api parse-platform

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

  

文件“tfss-0280f98d-7180​​-4528-9d24-3ec47d3b25d4-image.jpg”可以   不要打开,因为它是空的。

老实说,我很茫然。我在这一个照片问题上花费的时间远远超过实施Facebook登录的任何其他部分。而且我们的数据库设置方式,创建另一个字段以保存URL并加载Picasso实际上并不理想。对此问题的任何帮助都非常感谢!

1 个答案:

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