У меня есть настраиваемый макет индикатора выполнения. Я включаю этот макет в действия и использую его всякий раз, когда что-то обновляется или загружается. Однако в режиме отладки он устанавливает индикатор выполнения на нуль и уничтожает все объекты (адрес электронной почты, имя пользователя, пароль, профиль pi c) и не может сохранить его в Firebase.
Вот моя активность при регистрации code:
private TextInputEditText etEmail, etName;
private String email, name;
private ImageView ivProfile;
private FirebaseUser firebaseUser;
private DatabaseReference databaseReference;
private StorageReference fileStorage;
private Uri localFileUri, serverFileUri;
private FirebaseAuth firebaseAuth;
private View progressBar;
// Text is changed for confirm dialog
private Boolean textChanged = false;
@SuppressLint("SourceLockedOrientationActivity")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
etEmail = findViewById(R.id.etEmail);
etName = findViewById(R.id.etName);
ivProfile = findViewById(R.id.ivProfile);
fileStorage = FirebaseStorage.getInstance().getReference();
firebaseAuth = FirebaseAuth.getInstance();
firebaseUser = firebaseAuth.getCurrentUser();
progressBar = findViewById(R.id.progressBar);
setTitle("Profile");
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
if (firebaseUser!=null)
{
etName.setText(firebaseUser.getDisplayName());
etEmail.setText(firebaseUser.getEmail());
serverFileUri = firebaseUser.getPhotoUrl();
if (serverFileUri!=null)
{
Glide.with(this)
.load(serverFileUri)
.placeholder(R.drawable.default_profile)
.error(R.drawable.default_profile)
.into(ivProfile);
}
}
etName.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
textChanged = true;
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
// Logout button
public void btnLogoutClick(View view)
{
FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
firebaseAuth.signOut();
startActivity(new Intent(ProfileActivity.this, LoginActivity.class));
finish();
}
// Save changes button
public void btnSaveClick(View view)
{
if (textChanged)
{
new AlertDialog.Builder(ProfileActivity.this)
.setTitle("Save changes")
.setMessage("Please confirm that you want to apply these changes to your profile.")
.setPositiveButton(R.string.save, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (etName.getText().toString().trim().equals(""))
{
etName.setError(getString(R.string.enter_name));
} else {
if (localFileUri!=null){
updateNameAndPhoto();
} else {
updateOnlyName();
}
}
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which){
finish();
}
})
.setIcon(R.drawable.ic_save_primarycolor)
.show();
}
else
{
Toast.makeText(this, R.string.nothing_to_save, Toast.LENGTH_SHORT).show();
finish();
}
}
// Changing profile image
public void changeImage(View view)
{
if (serverFileUri==null)
{
pickImage();
}
else
{
PopupMenu popupMenu = new PopupMenu(this, view);
popupMenu.getMenuInflater().inflate(R.menu.menu_picture, popupMenu.getMenu());
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
int id = menuItem.getItemId();
if (id==R.id.mnuChangePic)
{
pickImage();
}
else if (id==R.id.mnuRemovePic)
{
removePhoto();
}
return false;
}
});
popupMenu.show();
}
}
// Method to change image
private void pickImage()
{
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)== PackageManager.PERMISSION_GRANTED) {
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 101);
}
else
{
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 102);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 101) {
if (resultCode == RESULT_OK) {
textChanged = true;
localFileUri = data.getData();
ivProfile.setImageURI(localFileUri);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode==102)
{
if (grantResults[0]==PackageManager.PERMISSION_GRANTED)
{
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 101);
}
else
{
Toast.makeText(this, R.string.permission_required, Toast.LENGTH_SHORT).show();
}
}
}
// Method to remove image
private void removePhoto()
{
textChanged = true;
progressBar.setVisibility(View.VISIBLE);
UserProfileChangeRequest request = new UserProfileChangeRequest.Builder()
.setDisplayName(etName.getText().toString().trim())
.setPhotoUri(null)
.build();
firebaseUser.updateProfile(request).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
progressBar.setVisibility(View.GONE);
if (task.isSuccessful()) {
String userID = firebaseUser.getUid();
databaseReference = FirebaseDatabase.getInstance().getReference().child(NodeNames.USERS);
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put(NodeNames.PHOTO, "");
databaseReference.child(userID).setValue(hashMap)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Toast.makeText(ProfileActivity.this, R.string.photo_removed_successfully, Toast.LENGTH_SHORT).show();
}
});
} else {
Toast.makeText(ProfileActivity.this,
getString(R.string.failed_to_update_profile, task.getException()), Toast.LENGTH_SHORT).show();
}
}
});
}
// Method that updates the name and the profile photo of the user
private void updateNameAndPhoto()
{
final String strFileName= firebaseUser.getUid() + ".jpg";
final StorageReference fileRef = fileStorage.child("images/"+ strFileName);
progressBar.setVisibility(View.VISIBLE);
fileRef.putFile(localFileUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
progressBar.setVisibility(View.GONE);
if(task.isSuccessful())
{
fileRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
serverFileUri = uri;
UserProfileChangeRequest request = new UserProfileChangeRequest.Builder()
.setDisplayName(etName.getText().toString().trim())
.setPhotoUri(serverFileUri)
.build();
firebaseUser.updateProfile(request).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
String userID = firebaseUser.getUid();
databaseReference = FirebaseDatabase.getInstance().getReference().child(NodeNames.USERS);
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put(NodeNames.NAME, etName.getText().toString().trim());
hashMap.put(NodeNames.PHOTO, strFileName);
databaseReference.child(userID).setValue(hashMap)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
finish();
}
});
} else {
Toast.makeText(ProfileActivity.this,
getString(R.string.failed_to_update_profile, task.getException()), Toast.LENGTH_SHORT).show();
}
}
});
}
});
}}});
}
// Method that updates only the username of the user
private void updateOnlyName()
{
// textChanged = true;
progressBar.setVisibility(View.VISIBLE);
UserProfileChangeRequest request = new UserProfileChangeRequest.Builder()
.setDisplayName(etName.getText().toString().trim())
.build();
firebaseUser.updateProfile(request).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
progressBar.setVisibility(View.GONE);
if (task.isSuccessful())
{
String userId = firebaseUser.getUid();
databaseReference = FirebaseDatabase.getInstance().getReference().child(NodeNames.USERS);
HashMap<String,String> hashMap = new HashMap<>();
hashMap.put(NodeNames.NAME, etName.getText().toString().trim());
databaseReference.child(userId).setValue(hashMap).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
finish();
}
});
}
else
{
Toast.makeText(ProfileActivity.this,
getString(R.string.failed_to_update_profile, task.getException()) , Toast.LENGTH_SHORT).show();
}
}
});
}
// Change password button
public void btnChangePasswordClick(View view)
{
startActivity(new Intent(ProfileActivity.this, ChangePasswordActivity.class));
}
@Override
public void onBackPressed() {
// super.onBackPressed();
if (textChanged)
{
new AlertDialog.Builder(ProfileActivity.this)
.setTitle("Save changes")
.setMessage("You have made changes to your profile. Would you like to save them?")
.setPositiveButton(R.string.save, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (etName.getText().toString().trim().equals(""))
{
etName.setError(getString(R.string.enter_name));
} else {
if (localFileUri!=null){
updateNameAndPhoto();
} else {
updateOnlyName();
}
}
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which){
finish();
}
})
.setIcon(R.drawable.ic_save_primarycolor)
.show();
}
else
{
finish();
}
}
}
Я новичок в Android Studio и кодирую с Java, не беспокойтесь: v