[英]How to set string value to spinner retrieved from Firestore database in android?
I have retrieved the value of gender from the firestore database which is a string.我已经从作为字符串的 firestore 数据库中检索了性别的值。
Now to set this value to the Spinner of the gender so that user can check and update the value on its own.现在将此值设置为性别的 Spinner,以便用户可以自行检查和更新该值。
The retrieved value should show, but I am unable to convert the string value and set it to the spinner in android.检索到的值应该显示,但我无法转换字符串值并将其设置为 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关注的是 getUserProfileDetails() 方法中的这些行
uGender.setText(gender);
uSpinnerC.setText(spinnerC);
You can do that check if your spiner text in male then setSelection 1 or 0 like below您可以这样做检查您的微调器文本是否为男性,然后 setSelection 1 或 0 如下所示
String spinnerC = (String) document.getString("spinnerC");
if (spinnerC.equals("Male")){
uSpinnerC.setSelection(0);
}else{
uSpinnerC.setSelection(1); //female case
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.