Вот мое действие ProfileCreation, где пользователь может создать имя пользователя, биографию и выбрать свою фотографию:
public class ProfileCreationActivity extends AppCompatActivity {
CircleImageView ivProfile;
EditText etUsername, etDescription;
Button btnFinished, btnProfilePicture;
private FirebaseAuth mAuthCustomize;
private FirebaseDatabase mDatabaseCustom;
private DatabaseReference databaseReference;
private FirebaseUser firebaseUser;
private String currentUserId;
private StorageReference mStorageRef;
private StorageTask uploadTask;
private static final int PICK_IMAGE_REQUEST = 1;
private Uri imageUri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile_creation);
etUsername = findViewById(R.id.usernameText);
etDescription = findViewById(R.id.describeText);
btnFinished = findViewById(R.id.finishedBtn);
btnProfilePicture = findViewById(R.id.profBtn);
ivProfile = findViewById(R.id.profPic);
ivProfile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openFileChooser();
}
});
mAuthCustomize = FirebaseAuth.getInstance();
currentUserId = mAuthCustomize.getCurrentUser().getUid();
databaseReference = FirebaseDatabase.getInstance().getReference("Users").child(currentUserId);
mStorageRef = FirebaseStorage.getInstance().getReference("Userphotos");
btnFinished.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final String nickname = etUsername.getText().toString().trim();
final String descriptive = etDescription.getText().toString().trim();
if(nickname.isEmpty()){
etUsername.setError("Please enter a username");
etUsername.requestFocus();
} else if(nickname.length() < 6){
Toast.makeText(ProfileCreationActivity.this,"Username too short!",Toast.LENGTH_SHORT).show();
} else if (descriptive.isEmpty()){
etDescription.setError("Please describe yourself");
etDescription.requestFocus();
} else{
Query query = FirebaseDatabase.getInstance().getReference().child("Users").orderByChild("username").equalTo(nickname);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.getChildrenCount() > 0){
Toast.makeText(ProfileCreationActivity.this,"Username already exists!",Toast.LENGTH_SHORT).show();
} else {
databaseReference.child("username").setValue(nickname);
databaseReference.child("description").setValue(descriptive);
fileUploader();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(ProfileCreationActivity.this,"Something went wrong!",Toast.LENGTH_SHORT).show();
}
});
Toast.makeText(ProfileCreationActivity.this,"Welcome",Toast.LENGTH_SHORT).show();
Intent goToProfile = new Intent(ProfileCreationActivity.this,ProfilePageActivity.class);
startActivity(goToProfile);
}
}
});
}
private void openFileChooser(){
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, PICK_IMAGE_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
&& data != null && data.getData() != null){
imageUri = data.getData();
ivProfile.setImageURI(imageUri);
}
}
private String getFileExtension(Uri uri){
ContentResolver cr = getContentResolver();
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
return mimeTypeMap.getExtensionFromMimeType(cr.getType(uri));
}
private void fileUploader() {
if(imageUri != null){
StorageReference fileReference = mStorageRef.child(System.currentTimeMillis() + "." + getFileExtension(imageUri));
fileReference.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
UploadImage uploadImage = new UploadImage(etUsername.getText().toString().trim(),
taskSnapshot.getStorage().getDownloadUrl().toString());
String uploadId = databaseReference.push().getKey();
databaseReference.child(uploadId).setValue(uploadImage);
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}
});
} else {
Toast.makeText(this, "Please choose a photo", Toast.LENGTH_SHORT).show();
}
}
}
Вот мой класс UploadImage:
public class UploadImage {
private String mImageUrl;
public UploadImage() {
}
public UploadImage(String name, String image){
mImageUrl = image;
}
public String getmImageUrl(){
return mImageUrl;
}
public void setImageUrl(String imageUrl){
mImageUrl = imageUrl;
}
}
Имя пользователязагружает, а также описание, но изображение, похоже, не загружается в мое хранилище Firebase. Я думаю, что проблема в методе fileUploader (), но я не уверен. Я чувствую, что делаю явно очевидную ошибку, и сейчас я перепробовал много разных вещей. Пожалуйста, помогите мне с этим. Заранее спасибо.