Я создаю приложение для Android с помощью Firebase, и у меня есть 3 кнопки для загрузки 3 разных изображений. Но когда я отправляю запрос, он загружает третье изображение 3 раза, и в базе данных некоторые поля отсутствуют. Позвольте мне показать вам, что я сделал:
Это модель пользователя:
public class CarrierUser {
public String fullname;
public String email;
public String password;
public String address;
public String city;
public String state;
public String zipcode;
public String country;
public String phone;
public String cardnumber;
public String expiredate;
public String CVC;
public String rate;
public String type;
public String profilePic;
public String idPic;
public String criminalRecordPic;
public Boolean activated;
public CarrierUser() {
}
public CarrierUser(String fullname, String email, String password, String address, String city, String state, String zipcode, String country, String phone, String cardnumber, String expiredate, String CVC, String type, String rate, String profilePic, String idPic, String criminalRecordPic, Boolean activated) {
this.fullname = fullname;
this.email = email;
this.password = password;
this.address = address;
this.city = city;
this.state = state;
this.zipcode = zipcode;
this.country = country;
this.phone = phone;
this.cardnumber = cardnumber;
this.expiredate = expiredate;
this.CVC = CVC;
this.type = type;
this.rate = rate;
this.profilePic = profilePic;
this.idPic = idPic;
this.criminalRecordPic = criminalRecordPic;
this.activated = activated;
}
}
И это класс регистрации, я знаю, что это много читать, но мне действительно нужна помощь.
public class SignupCarrier extends AppCompatActivity {
EditText editfullname, editemail, editpassword, editconfirmpassword, editaddress, editcity, editstate, editzipcode, editcountry, editphone, editcardnumber, editexpiredate, editcvc;
Button upProfile, upIDPhoto, upCriminalRecord, buttonSigningUp;
private Uri mProfilePic, mIdPhoto,mCriminalRecord;
FirebaseAuth mFirebaseAuth;
String finalPath;
private StorageReference mStorageRef;
private StorageTask mUploadTask;
private static final int PICK_IMAGE_REQUEST_PROFILE = 1;
private static final int PICK_IMAGE_REQUEST_ID = 1;
private static final int PICK_IMAGE_REQUEST_CR = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_signup_carrier);
editfullname = (EditText) findViewById(R.id.fullname);
editemail = (EditText) findViewById(R.id.email);
editpassword = (EditText) findViewById(R.id.password);
editconfirmpassword = (EditText) findViewById(R.id.confirmpassword);
editaddress = (EditText) findViewById(R.id.address);
editcity = (EditText) findViewById(R.id.city);
editstate = (EditText) findViewById(R.id.state);
editzipcode = (EditText) findViewById(R.id.zipcode);
editcountry = (EditText) findViewById(R.id.country);
editphone = (EditText) findViewById(R.id.phone);
editcardnumber = (EditText) findViewById(R.id.cardnumber);
editexpiredate = (EditText) findViewById(R.id.expiredate);
editcvc = (EditText) findViewById(R.id.cvc);
mFirebaseAuth = FirebaseAuth.getInstance();
upProfile = (Button) findViewById(R.id.profilePic);
upIDPhoto = (Button) findViewById(R.id.idphotoPic);
upCriminalRecord = (Button) findViewById(R.id.criminalRecord);
buttonSigningUp = (Button) findViewById(R.id.buttonSigningUp);
mStorageRef = FirebaseStorage.getInstance().getReference("carriersPictures");
upProfile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openFileChooser(mProfilePic);
}
});
upIDPhoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openFileChooser(mIdPhoto);
}
});
upCriminalRecord.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openFileChooser(mCriminalRecord);
}
});
buttonSigningUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String profilePictUri = uploadFile(mProfilePic);
final String idPictUri = uploadFile(mIdPhoto);
final String criminalRecordUri = uploadFile(mCriminalRecord);
final String fullname = editfullname.getText().toString();
final String email = editemail.getText().toString();
final String password = editpassword.getText().toString();
final String confirmPassword = editconfirmpassword.getText().toString();
final String address = editaddress.getText().toString();
final String city = editcity.getText().toString();
final String state = editstate.getText().toString();
final String zipcode = editzipcode.getText().toString();
final String country = editcountry.getText().toString();
final String phone = editphone.getText().toString();
final String rate = "0";
final String type = "carrier";
final String cardnumber = editcardnumber.getText().toString();
final String expiredate = editexpiredate.getText().toString();
final String CVC = editcvc.getText().toString();
String s = "none";
if(fullname.isEmpty()) {
editfullname.setError("enter a valid fullname");
editfullname.requestFocus();
return;
}
if(email.isEmpty()) {
editemail.setError("enter a valid email");
editemail.requestFocus();
return;
}
if(password.isEmpty()) {
editpassword.setError("enter a valid password");
editpassword.requestFocus();
return;
}
if(confirmPassword.isEmpty()) {
editconfirmpassword.setError("this should not be empty");
editconfirmpassword.requestFocus();
return;
}
if(address.isEmpty()) {
editaddress.setError("enter a valid address");
editaddress.requestFocus();
return;
}
if(city.isEmpty()) {
editcity.setError("enter a valid city ");
editcity.requestFocus();
return;
}
if(state.isEmpty()) {
editstate.setError("enter a valid state/region");
editstate.requestFocus();
return;
}
if(zipcode.isEmpty()) {
editzipcode.setError("enter a valid zipcode");
editzipcode.requestFocus();
return;
}
if(country.isEmpty() ) {
editcountry.setError("enter a valid country");
editcountry.requestFocus();
return;
}
if(phone.isEmpty()) {
editphone.setError("enter a valid phone");
editphone.requestFocus();
return;
}
if(password.length() < 8){
editpassword.setError("password should be at least 8 characters long");
editpassword.requestFocus();
return;
}
if(!password.equals(confirmPassword)) {
editconfirmpassword.setError("passwords don't match");
editconfirmpassword.requestFocus();
return;
}
if(cardnumber.isEmpty()) {
editcardnumber.setError("enter a valid card number");
editcardnumber.requestFocus();
return;
}
if(expiredate.isEmpty())
{
editexpiredate.setError("enter a valid expired date ");
editexpiredate.requestFocus();
}
if(CVC.isEmpty())
{
editcvc.setError("enter a valid CVC ");
editcvc.requestFocus();
}
final boolean activated = false;
mFirebaseAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()) {
CarrierUser carrierUser = new CarrierUser(
fullname,
email,
password,
address,
city,
state,
zipcode,
country,
phone,
cardnumber,
expiredate,
CVC,
type,
rate,
profilePictUri,
idPictUri,
criminalRecordUri,
activated
);
FirebaseDatabase.getInstance().getReference("User")
.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).setValue(carrierUser).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()) {
Toast.makeText(SignupCarrier.this,"Your request has been sent for approval", Toast.LENGTH_LONG).show();
openLogin();
}
}
});
}
}
});
}
});
}
private void openLogin() {
Intent i = new Intent(SignupCarrier.this, screenNotLogged.class);
startActivity(i);
}
private String getFileExtension(Uri uri) {
ContentResolver cR = getContentResolver();
MimeTypeMap mime = MimeTypeMap.getSingleton();
return mime.getExtensionFromMimeType(cR.getType(uri));
}
private String uploadFile(Uri path) {
if(path != null) {
StorageReference fileReference = mStorageRef.child(editfullname.getText().toString()+"-"+System.currentTimeMillis()+getFileExtension(path));
mUploadTask = fileReference.putFile(path)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
finalPath = taskSnapshot.getUploadSessionUri().toString();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(SignupCarrier.this, e.getMessage(),Toast.LENGTH_LONG).show();
}
});
}
return finalPath;
}
private void openFileChooser( Uri urltoPhoto) {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
if (urltoPhoto == mProfilePic) {
startActivityForResult(intent, PICK_IMAGE_REQUEST_PROFILE);
} else if (urltoPhoto == mIdPhoto) {
startActivityForResult(intent, PICK_IMAGE_REQUEST_ID);
} else if (urltoPhoto == mCriminalRecord) {
startActivityForResult(intent, PICK_IMAGE_REQUEST_CR);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == PICK_IMAGE_REQUEST_PROFILE && resultCode == RESULT_OK && data != null && data.getData() != null)
{
mProfilePic = data.getData();
}
if(requestCode == PICK_IMAGE_REQUEST_ID && resultCode == RESULT_OK && data != null && data.getData() != null)
{
mIdPhoto = data.getData();
}
if(requestCode == PICK_IMAGE_REQUEST_CR && resultCode == RESULT_OK && data != null && data.getData() != null)
{
mCriminalRecord = data.getData();
}
}
}
Поскольку мне нужны URL-адреса загруженных файлов, я решил объявить некоторые переменные равными функции, которая загружает это изображение в базу данных, и заставить эту функцию возвращать строку, это казалось логичным. Я думаю, что поля profilePic, idPic и CriminalRecordPic отсутствуют, потому что эта логика не работает, и эта функция не возвращает нужную мне строку, но вопрос в том, как я могу получить эти URL?
Я хотел быпризнателен, если вы можете мне помочь! Спасибо!