如何使用毕加索上传和检索图像

时间:2019-04-28 01:49:59

标签: java android firebase picasso

我想将图片上传到图片中并保存到数据库中,然后将其另存为url,然后将其作为个人资料图片调用到我的圆形图片视图中。但是它并没有保存为网址,也没有显示为配置文件。

我尝试切换代码。无效并重新启动android studio。清理和重建项目无数次。擦除了手机和仿真器中的数据。我看了一堆视频,并在这里和其他地方阅读了答案。

private Button UpdateAccountSettings;
private EditText userName, userStatus;
private CircleImageView userProfileImage;

private String currentUserID;
private FirebaseAuth mAuth;
private DatabaseReference RootRef;

private  static final int GalleryPick = 1;
private StorageReference UserProfileImagesRef;
private ProgressDialog loadingBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);

    mAuth = FirebaseAuth.getInstance();
    currentUserID = mAuth.getCurrentUser().getUid();
    RootRef = FirebaseDatabase.getInstance().getReference();
    UserProfileImagesRef = FirebaseStorage.getInstance().getReference().child("Profile Images");

    InitializeFields();

    userName.setVisibility(View.INVISIBLE);

    UpdateAccountSettings.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            UpdateSettings();
        }
    });

    RetrieveUserInfo();

    userProfileImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent galleryIntent = new Intent();
            galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
            galleryIntent.setType("image/*");
            startActivityForResult(galleryIntent, GalleryPick);

        }
    });
}

private void InitializeFields() {

    userName = (EditText) findViewById(R.id.set_user_name);
    userStatus = (EditText) findViewById(R.id.set_profile_status);
    userProfileImage = (CircleImageView) findViewById(R.id.set_profile_image);
    loadingBar = new ProgressDialog(this);
    UpdateAccountSettings = (Button) findViewById(R.id.update_settings_button);
}

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

    if(requestCode == GalleryPick  &&   resultCode==RESULT_OK && data!=null){

        Uri ImageUri = data.getData();

        CropImage.activity()
                .setGuidelines(CropImageView.Guidelines.ON)
                .setAspectRatio(1,1)
                .start(this);
    }

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

        if(resultCode == RESULT_OK){

            loadingBar.setTitle("Set Profile Image");
            loadingBar.setMessage("Please wait your profile image is updating...");
            loadingBar.setCanceledOnTouchOutside(false);
            loadingBar.show();

            final Uri resultUri = result.getUri();

            StorageReference filePath = UserProfileImagesRef.child(currentUserID + ".jpg");

            filePath.putFile(resultUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {

                    if(task.isSuccessful())
                    {

                        Toast.makeText(SettingsActivity.this, "Profile pic upload successful", Toast.LENGTH_SHORT).show();

                        String downloadUrl = task.getResult().getMetadata().getReference().getDownloadUrl().toString();

                        RootRef.child("Users").child(currentUserID).child("image")
                                .setValue(downloadUrl)
                                .addOnCompleteListener(new OnCompleteListener<Void>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Void> task) {

                                        if(task.isSuccessful()){

                                            Toast.makeText(SettingsActivity.this, "Image is saved", Toast.LENGTH_SHORT).show();
                                            loadingBar.dismiss();
                                        } else {

                                            String message = task.getException().toString();
                                            Toast.makeText(SettingsActivity.this, "Error: " + message, Toast.LENGTH_SHORT).show();
                                            loadingBar.dismiss();
                                        }
                                    }
                                });

                    } else {
                        String message = task.getException().toString();
                        Toast.makeText(SettingsActivity.this, "Error: " + message, Toast.LENGTH_SHORT).show();
                        loadingBar.dismiss();

                    }
                }
            });
        }
    }
}

private void UpdateSettings() {

    String setUserName = userName.getText().toString();
    String setStatus = userStatus.getText().toString();

    if(TextUtils.isEmpty(setUserName)){

        Toast.makeText(this, "Please enter your user name...", Toast.LENGTH_SHORT).show();
    }
    if(TextUtils.isEmpty(setStatus)){

        Toast.makeText(this, "Please write your status...", Toast.LENGTH_SHORT).show();
    }
    else {

        HashMap<String, Object> profileMap = new HashMap<>();
        profileMap.put("uid", currentUserID);
        profileMap.put("name", setUserName);
        profileMap.put("status", setStatus);

        RootRef.child("Users").child(currentUserID).updateChildren(profileMap)
                .addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {

                        if(task.isSuccessful()){

                            SendUserToMainActivity();
                            Toast.makeText(SettingsActivity.this, "Profile Updated Successfully", Toast.LENGTH_SHORT).show();

                        } else{

                            String message = task.getException().toString();
                            Toast.makeText(SettingsActivity.this, "Error:", Toast.LENGTH_SHORT).show();
                        }

                    }
                });
    }
}

private void RetrieveUserInfo() {

    RootRef.child("Users").child(currentUserID)
            .addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                    if ((dataSnapshot.exists()) && (dataSnapshot.hasChild("name") && (dataSnapshot.hasChild("image"))))
                    {

                        String retrieveUserName = dataSnapshot.child("name").getValue().toString();
                        String retrieveStatus = dataSnapshot.child("status").getValue().toString();
                        String retrieveProfileImage = dataSnapshot.child("image").getValue().toString();

                        userName.setText(retrieveUserName);
                        userStatus.setText(retrieveStatus);
                        Picasso.get().load(retrieveProfileImage).into(userProfileImage);

                    }

                    else if ((dataSnapshot.exists()) && (dataSnapshot.hasChild("name")))
                    {

                        String retrieveUserName = dataSnapshot.child("name").getValue().toString();
                        String retrieveStatus = dataSnapshot.child("status").getValue().toString();

                        userName.setText(retrieveUserName);
                        userStatus.setText(retrieveStatus);
                    }

                    else {

                        userName.setVisibility(View.VISIBLE);
                        Toast.makeText(SettingsActivity.this, "Update your info", Toast.LENGTH_SHORT).show();

                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });
}

private void SendUserToMainActivity() {

    Intent mainIntent = new Intent(SettingsActivity.this, MainActivity.class);
    mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(mainIntent);
    finish();
}

我想使用图像URL将图像上传到Firebase数据库中,然后将其作为个人资料图片显示在我的圆形图像视图中。

编辑!!

我上传了该代码并导入了延续,但这就是我现在看到的。

Code2

2 个答案:

答案 0 :(得分:0)

   private void uploadImage() {

    if(filePath != null)
    {
        final ProgressDialog progressDialog = new ProgressDialog(this);
        progressDialog.setTitle("Uploading...");
        progressDialog.show();
        progressDialog.setCancelable(false);

        final StorageReference ref = storageReference.child("images/"+ UUID.randomUUID().toString());
        ref.putFile(filePath)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        progressDialog.dismiss();
                        Toast.makeText(AdminPanel.this, "Uploaded", Toast.LENGTH_SHORT).show();
                       // Upload upload=new Upload( databaseReference.child(cat_spinner.getSelectedItem().toString()).child(databaseReference.push().getKey()).setValue(taskSnapshot.))

                        ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                            @Override
                            public void onSuccess(Uri uri) {

                              DatabaseReference url=  databaseReference.child(cat_spinner.getSelectedItem().toString()).child(databaseReference.push().getKey());

                                Upload upload=new Upload( uri.toString());
                                url.setValue(upload);
                                Intent Refresh=new Intent(AdminPanel.this, AdminPanel.class);
                                startActivity(Refresh);
                                finish();
                            }
                        });



                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        progressDialog.dismiss();
                        Toast.makeText(AdminPanel.this, "Failed "+e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                })
                .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+"%");

                    }
                });
    }
}

答案 1 :(得分:0)

我认为更新应该是这样的:

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

    filePath.putFile(resultUri).continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
        @Override
        public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
            if (!task.isSuccessful()) {
                throw task.getException();
            }

            // Continue with the task to get the download URL
            return filePath.getDownloadUrl();
        }}).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {

            if(task.isSuccessful())
            {

                Toast.makeText(SettingsActivity.this, "Profile pic upload successful", Toast.LENGTH_SHORT).show();

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

                RootRef.child("Users").child(currentUserID).child("image")
                        .setValue(downloadUrl)
                        .addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {

                                if(task.isSuccessful()){

                                    Toast.makeText(SettingsActivity.this, "Image is saved", Toast.LENGTH_SHORT).show();
                                    loadingBar.dismiss();
                                } else {

                                    String message = task.getException().toString();
                                    Toast.makeText(SettingsActivity.this, "Error: " + message, Toast.LENGTH_SHORT).show();
                                    loadingBar.dismiss();
                                }
                            }
                        });

            } else {
                String message = task.getException().toString();
                Toast.makeText(SettingsActivity.this, "Error: " + message, Toast.LENGTH_SHORT).show();
                loadingBar.dismiss();

            }
        }
    });