到目前为止,在我的社交媒体应用程序中,用户的数据(例如名字,姓氏,电子邮件,性别等)可以保存在firebase数据库中,并在需要时进行检索。截止到今天,我第一次创建个人资料时就得到了一张有效的个人资料图片,您可以点击空白的个人资料图片图标,它会加载您的图库,并用用户选择的任何图片替换它。
尽管这很整洁,但我需要能够以某种方式在我的Firebase数据库的“用户”节点下上传此图像。当涉及到转换位图数据时,我感到很迷茫,在阅读了一些文档之后,仍然让我感到困惑。下面是我的代码,该代码使用本地保存的照片替换为个人资料照片,以显示到目前为止的信息。
@Override
public void onClick(View view)
{
if (view == profilePicture)
{
//Toast.makeText(this, "We made it to the onClick for image!", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 0);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK)
{
Uri targetUri = data.getData();
Bitmap bitmap;
try
{
bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri));
profilePicture.setImageBitmap(bitmap);
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
onClick方法在用户点击配置文件图标后运行。现在,我将向您展示我当前正在使用的数据库,这是Firebase实时数据库,而不是Firebase存储。虽然Firebase存储可能更合适,但我似乎无法弄清楚如何分辨谁的照片是谁,因为它没有使用关联的用户ID上传照片。
答案 0 :(得分:0)
与数据库类似,对于像您这样的简单问题,更好的解决方案将是Firebase Storage,而不是上载bitMap,但是您可以轻松地上载图像等文件。
以下是我当前在我的应用中使用的方法:
private void chooseImage() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
}
private void uploadImage() {
if(filePath != null)
{
final ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setTitle("Uploading...");
progressDialog.show();
StorageReference ref = storageReference.child("images/"+userID);
ref.putFile(filePath)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
progressDialog.dismiss();
toastMessage("Uploaded");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
progressDialog.dismiss();
toastMessage("Failed"+e.getMessage());
}
})
.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
double progress = (100.0*taskSnapshot.getBytesTransferred()/taskSnapshot
.getTotalByteCount());
progressDialog.setMessage("Uploaded "+(int)progress+"%");
}
});
}
}