java - 如何将字符串值设置为从 Android 中的 Firestore 数据库检索的微调器?

标签 java android firebase google-cloud-firestore android-spinner

我已从 firestore 数据库中检索了性别值,该值是一个字符串。

现在将此值设置为性别的 Spinner,以便用户可以自行检查和更新该值。

检索到的值应该显示,但我无法转换字符串值并将其设置为 android 中的微调器。

我尝试搜索类似的示例,但还没有成功。

    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();
                    }

                }
            });
        }


    }

关注的是 getUserProfileDetails() 方法中的这些行

    uGender.setText(gender);
    uSpinnerC.setText(spinnerC);

最佳答案

您可以检查您的 Spiner 文本是否为男性,然后 setSelection 1 或 0,如下所示

String spinnerC = (String) document.getString("spinnerC");
if (spinnerC.equals("Male")){
  uSpinnerC.setSelection(0);
}else{
  uSpinnerC.setSelection(1); //female case
}

关于java - 如何将字符串值设置为从 Android 中的 Firestore 数据库检索的微调器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58248347/

相关文章:

java - 为什么 JSP(和 JSTL/EL)采用与 Servlet 或 JSF 不同的方式来执行资源注入(inject)?

angular - 如何使用 NativeScript 和 Angular 接收推送通知?

python - 如何使用Python的SDK在Firestore上编写位置、引用和时间戳数据类型?

android - 如何将 firebase 身份验证与 Android 应用程序的 instagram 登录集成

java - 无法从 jar 文件中找到 Premain-Class list 属性

java.lang.RuntimeException : Your content must have a ListView whose id attribute is 'android.R.id.list' - error

java - 使用 javax.servlet.http.HttpServlet 处理 PATCH 请求?

java - AOSP 5.1 - 如何使用实根权限执行我的应用程序?

android - 无法在自定义对话框中检索 EditText

android - 使用 Android Studio 进行生产可以吗? (许可证问题)