Reputation:
I have retrieved the value of gender from the firestore database which is a string.
Now to set this value to the Spinner of the gender so that user can check and update the value on its own.
The retrieved value should show, but I am unable to convert the string value and set it to the spinner in android.
I tried searching for similar examples but no good yet.
public class EditProfile extends AppCompatActivity {
private String Fullname, Username, SpinnerC, Gender, DateOfBirth;
private CircleImageView userImage;
private Button updateProfileDetails;
private static final String TAG = "DocSnippets";
private EditText uFullname,uUsername, uDateOfBirth;
private Uri mUri;
private StorageReference storageReference;
private Spinner uSpinnerC, uGender;
private String date, tokenId;
private String mUserId;
private int REQ_CODE = 100, PERMISSION_CODE = 200;
private DocumentReference mUserRef;
private String permissions[] = {
Manifest.permission.READ_EXTERNAL_STORAGE
};
private FirebaseAuth mAuth;
private FirebaseFirestore db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_profile);
mAuth = FirebaseAuth.getInstance();
db = FirebaseFirestore.getInstance();
mUserId = mAuth.getCurrentUser().getUid();
mUserRef = FirebaseFirestore.getInstance().collection("users").document(mUserId);
storageReference = FirebaseStorage.getInstance().getReference().child("profile_pic");
uFullname = (EditText) findViewById(R.id.register_etName1);
uUsername = (EditText) findViewById(R.id.register_etUserName1);
userImage = (CircleImageView) findViewById(R.id.setupprofile_image1);
uDateOfBirth = (EditText) findViewById(R.id.register_etDateOfBirth);
uGender = findViewById(R.id.register_etGender1);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.gender, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
uGender.setAdapter(adapter);
uSpinnerC = findViewById(R.id.register_spinnerC1);
ArrayAdapter<CharSequence> adapterC = ArrayAdapter.createFromResource(this,
R.array.numbers, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
uSpinnerC.setAdapter(adapterC);
requestFunction();
userImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, REQ_CODE);
}
});
uDateOfBirth.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showDateDialog();
}
});
getUserProfileDetails();
updateProfileDetails.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
checkDataAndSave();
}
});
}
private void getUserProfileDetails(){
mUserRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
Log.d(TAG, "DocumentSnapshot data: " + document.getData());
String username = (String) document.getString("username");
String gender = (String) document.getString("gender");
String dateOfBirth = (String) document.getString("dateOfBirth");
String email = (String) document.getString("email");
String fullname = (String) document.getString("fullname");
String spinnerC = (String) document.getString("spinnerC");
String profilepic = (String) document.getString("profile_pic");
uUsername.setText(username);
uGender.setText(gender);
uDateOfBirth.setText(dateOfBirth);
uSpinnerC.setText(spinnerC);
Picasso.get()
.load(profilepic)
.resize(50, 50)
.centerCrop()
.into(userImage);
} else {
Log.d(TAG, "No such document");
}
}
}
});
}
public void showDateDialog() {
Calendar cal = Calendar.getInstance();
final int day = cal.get(Calendar.DAY_OF_MONTH);
int month = cal.get(Calendar.MONTH) ;
int year = cal.get(Calendar.YEAR);
DatePickerDialog.OnDateSetListener listener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
if (day < 10 && monthOfYear < 10)
date = "0" + dayOfMonth + "/0" + monthOfYear + "/" + year;
else if (day < 10 && monthOfYear > 10)
date = "0" + dayOfMonth + "/" + monthOfYear + "/" + year;
else if (day > 10 && monthOfYear < 10)
date = dayOfMonth + "/0" + monthOfYear + "/" + year;
else
date = dayOfMonth + "/" + monthOfYear + "/" + year;
uDateOfBirth.setText(date);
}
};
DatePickerDialog dpDialog = new DatePickerDialog(this, listener, year, month, day);
dpDialog.show();
}
private void checkDataAndSave() {
String fullName = uFullname.getText().toString().trim();
String username = uUsername.getText().toString().trim();
String genderselection = uGender.getSelectedItem().toString();
String dateOfBirthSelected = uDateOfBirth.getText().toString();
String spinnerC = uSpinnerC.getSelectedItem().toString();
if (mUri == null){
Toast.makeText(this, "Please Select Image", Toast.LENGTH_SHORT).show();
return;
}
if (fullName.isEmpty()){
Toast.makeText(this, "Please enter your Name", Toast.LENGTH_SHORT).show();
return;
}
if (username.isEmpty()){
Toast.makeText(this, "Please enter your User Name", Toast.LENGTH_SHORT).show();
return;
}
if (genderselection.isEmpty()){
Toast.makeText(this, "Please Select the Gender", Toast.LENGTH_SHORT).show();
return;
}
if (spinnerC.isEmpty()){
Toast.makeText(this, "Please enter the value", Toast.LENGTH_SHORT).show();
return;
}
if (dateOfBirthSelected.isEmpty()){
Toast.makeText(this, "Please Enter the Date of Birth", Toast.LENGTH_SHORT).show();
return;
}
else{
uploadImage(fullName, username, genderselection, dateOfBirthSelected, spinnerC);
}
}
private void uploadImage(final String username, final String fullName, final String genderselection, final String dateOfBirthSelected, final String spinnerC) {
UploadTask task = storageReference.child(mUserId).putFile(mUri);
task.addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
if(task.isSuccessful()){
task.getResult().getStorage().getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
String imageUrl = uri.toString();
saveData(username, fullName, imageUrl, genderselection, dateOfBirthSelected, spinnerC);
}
});
}
else{
Toast.makeText(getApplicationContext(), task.getException().getLocalizedMessage(), Toast.LENGTH_SHORT).show();
}
}
});
}
private void saveData(String username, String fullName, String imageUrl, String genderselection, String dateOfBirthSelected, String spinnerC) {
Map<String, Object> map = new HashMap<>();
map.put("profile_pic", imageUrl);
map.put("fullname", fullName);
map.put("username", username);
map.put("gender",genderselection);
map.put("dateOfBirth", dateOfBirthSelected);
map.put("spinnerC", spinnerC);
map.put("tokenId", tokenId);
map.put("userId", mAuth.getCurrentUser().getUid());
//to save the current date
// map.put("date", new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format(new Date()));
mUserRef.update(map).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
Toast.makeText(EditProfile.this, "Please Verify Your Email To Login", Toast.LENGTH_SHORT).show();
Intent toHomeActivity = new Intent(EditProfile.this, SignInActivity.class);
toHomeActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(toHomeActivity);
finish();
}
else{
Toast.makeText(getApplicationContext(), task.getException().getLocalizedMessage(), Toast.LENGTH_SHORT).show();
}
}
});
}
}
concern is regarding these lines in getUserProfileDetails() method
uGender.setText(gender);
uSpinnerC.setText(spinnerC);
Upvotes: 0
Views: 593
Reputation: 2835
You can do that check if your spiner text in male then setSelection 1 or 0 like below
String spinnerC = (String) document.getString("spinnerC");
if (spinnerC.equals("Male")){
uSpinnerC.setSelection(0);
}else{
uSpinnerC.setSelection(1); //female case
}
Upvotes: 2