在我的注册活动中,无法从android应用程序的库中选择图像

时间:2018-12-01 18:34:34

标签: android firebase android-studio

当我在如下所示的注册活动中使用它并尝试将其发送到Firebase实时数据库时,我无法从图库中选择图像,但是我创建仅插入图像而没有用户数据的活动时失败到实时数据库,然后我成功了,但是在注册活动中,我想用用户数据选择图像,也想将其发送到Firebase实时数据库,但是我不知道该怎么做

这是我的registrationActivity.java

public class RegistrationActivity extends AppCompatActivity{

private EditText userName, userPassword, userEmail, userAge;
private Button regButton;
private TextView userLogin;
private FirebaseAuth firebaseAuth;
private ImageView userProfilePic;
String email, name, age, password;
private FirebaseStorage firebaseStorage;
private static int PICK_IMAGE = 123;
Uri imagePath;
private StorageReference storageReference;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == PICK_IMAGE && resultCode == RESULT_OK && data.getData() != null){
        imagePath = data.getData();
        try {
            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), imagePath);
            userProfilePic.setImageBitmap(bitmap);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    super.onActivityResult(requestCode, resultCode, data);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_registration);
    setupUIViews();
    firebaseAuth = FirebaseAuth.getInstance();
    firebaseStorage = FirebaseStorage.getInstance();
    storageReference = firebaseStorage.getReference();
    userProfilePic.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            Intent intent = new Intent();
            intent.setType("images/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent, "Select Image"), PICK_IMAGE);
        }
    });

    regButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(validate()){
                //Upload data to the database
                String user_email = userEmail.getText().toString().trim();
                String user_password = userPassword.getText().toString().trim();
                firebaseAuth.createUserWithEmailAndPassword(user_email, user_password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if(task.isSuccessful()){
                            //sendEmailVerification();
                            sendUserData();
                            firebaseAuth.signOut();
                            Toast.makeText(RegistrationActivity.this,"Successfully Registered, Upload complete!", Toast.LENGTH_SHORT).show();
                            finish();

                            startActivity(new Intent(RegistrationActivity.this, MainActivity.class));
                        }else{
                            Toast.makeText(RegistrationActivity.this, "Registration Failed", Toast.LENGTH_SHORT).show();
                        }

                    }
                });
            }
        }
    });
    userLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            startActivity(new Intent(RegistrationActivity.this, MainActivity.class));
        }
    });
}

private void setupUIViews(){

    userName = (EditText)findViewById(R.id.etUserName);
    userPassword = (EditText)findViewById(R.id.etUserPassword);
    userEmail = (EditText)findViewById(R.id.etUserEmail);
    regButton = (Button)findViewById(R.id.btnRegister);
    userLogin = (TextView)findViewById(R.id.tvUserLogin);
    userAge = (EditText)findViewById(R.id.etAge);
    userProfilePic = (ImageView)findViewById(R.id.ivProfile);

}

private Boolean validate(){

    Boolean result = false;
    name = userName.getText().toString();
    password = userPassword.getText().toString();
    email = userEmail.getText().toString();
    age = userAge.getText().toString();

    if(name.isEmpty() || password.isEmpty() || email.isEmpty() || age.isEmpty() || imagePath == null){

        Toast.makeText(this, "Please enter all the details", Toast.LENGTH_SHORT).show();
    }else{
        result = true;
    }

    return result;
}
private void sendEmailVerification(){
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    if(firebaseUser!=null)
        firebaseUser.sendEmailVerification().addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
               if(task.isSuccessful()){
                   sendUserData();
                   Toast.makeText(RegistrationActivity.this, "Successfully Registered, Verification mail sent!", Toast.LENGTH_SHORT).show();
                   firebaseAuth.signOut();
                   finish();
                   startActivity(new Intent(RegistrationActivity.this, MainActivity.class));
               }else{
                   Toast.makeText(RegistrationActivity.this, "Verification mail has'nt been sent!", Toast.LENGTH_SHORT).show();
               }
            }
        });
    }
}

private void sendUserData(){
    FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
    DatabaseReference myRef = firebaseDatabase.getReference(firebaseAuth.getUid());
    StorageReference imageReference = storageReference.child(firebaseAuth.getUid()).child("Images").child("Profile Pic");  //User id/Images/Profile Pic.jpg
    UploadTask uploadTask = imageReference.putFile(imagePath);
    uploadTask.addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
           Toast.makeText(RegistrationActivity.this, "Upload failed!", Toast.LENGTH_SHORT).show();
        }
    }).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
        @Override
       public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
            Toast.makeText(RegistrationActivity.this, "Upload successful!", Toast.LENGTH_SHORT).show();
       }

    });
    UserProfile userProfile = new UserProfile(age, email, name);
    myRef.setValue(userProfile);
}

}

它总是提醒我,请填写所有详细信息,因为我无法从图库中选择图片

1 个答案:

答案 0 :(得分:1)

我浏览了您的代码,但未在其中找到OnActivityResult类,因此创建一个protected void onActivityResult(int requestCode, int resultCode, Intent data) {}可以帮助您从库中选择任何图像后得到结果数据。