使用Java在Firebase上保存和访问照片

时间:2019-07-14 20:15:35

标签: java android firebase firebase-storage picasso

如果我的问题格式错误,请告诉我。 我找到了一个适合我在工作中的项目需求的代码,并对其进行了调整和实现,使其成为我的代码,但是它并不合适。我不是专家程序员。仅供参考。 基本上,它的作用是:在上一个活动中输入一些基本详细信息之后,它会带您进入该活动(SetupActivity),并询问个人资料图像,用户名,全名...等。 现在,选择并裁剪图像后,它将立即立即将其上载到Firebase,然后返回到同一活动,该活动使您可以填写其余表单,然后单击“保存”并继续进入主活动。这不是坏事,但是...我从一点了解的代码来看,应该是通过当前用户上传的图像来获取图像,并将其加载到屏幕上的占位符(imageview)中,但它不起作用那。该图像显示在实时数据库中的Firebase存储BUT上,在用户下方有一个条目,用于输入图像URL及其类似物 这个:(profileimage:“ com.google.android.gms.tasks.zzu@3bb675f”) 这是什么意思,它是否不显示该图像的相应http链接?

就像我说过的那样,我仍然在学习编码,但是我尝试过几次重新排列代码,但是总是在遇到错误或在错误结束时遇到另一个错误。 我也尝试使用Glide而不是Picasso,但是在选择并上传后,它仍然无法在imageviewer中显示上传的图片。

ProfileImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view)
        {
            Intent galleryIntent = new Intent();
            galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
            galleryIntent.setType("image/*");
            startActivityForResult(galleryIntent, Gallery_Pick);
        }
    });


    UsersRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot)
        {
            if(dataSnapshot.exists())
            {
                if (dataSnapshot.hasChild("profileimage"))
                {
                    String image = dataSnapshot.child("profileimage").getValue().toString();
                    Picasso.get().load(image).placeholder(R.drawable.profile).into(ProfileImage);
                }
                else
                {
                    Toast.makeText(SetupActivity.this, "Please select profile image first.", Toast.LENGTH_SHORT).show();
                }
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}



@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode==Gallery_Pick && resultCode==RESULT_OK && data!=null)
    {
        Uri ImageUri = data.getData();

        CropImage.activity(ImageUri)
                .start(this);
    }

    if(requestCode==CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE)
    {
        CropImage.ActivityResult result = CropImage.getActivityResult(data);

        if(resultCode == RESULT_OK)
        {
            loadingBar.setTitle("Profile Image");
            loadingBar.setMessage("Please wait, while we updating your profile image...");
            loadingBar.show();
            loadingBar.setCanceledOnTouchOutside(true);

            Uri resultUri = result.getUri();

           final StorageReference filePath = UserProfileImageRef.child("profileimage").child(currentUserID+".jpg");

            filePath.putFile(resultUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onComplete(@NonNull final Task<UploadTask.TaskSnapshot> task)
                {
                    if(task.isSuccessful())
                    {
                        Toast.makeText(SetupActivity.this, "Profile Image stored successfully to Firebase storage...", Toast.LENGTH_SHORT).show();

                        String downloadUrl = task.getResult().getStorage().getDownloadUrl().toString();


                        UsersRef.child("profileimage").setValue(downloadUrl)
                                .addOnCompleteListener(new OnCompleteListener<Void>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Void> task)
                                    {
                                        if(task.isSuccessful())
                                        {
                                            Intent selfIntent = new Intent(SetupActivity.this, SetupActivity.class);
                                            startActivity(selfIntent);

                                            Toast.makeText(SetupActivity.this, "Profile Image stored to Firebase Database Successfully...", Toast.LENGTH_SHORT).show();
                                            loadingBar.dismiss();
                                        }

我希望在选择并上传到Firebase之后,图像会出现在imageview上,而且firebase实时数据库中的图像url也是正确的http格式。

0 个答案:

没有答案