You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中传递Spinner选中值至另一页面并写入Cloud Firestore

解决跨页面传递Spinner选中值并写入Cloud Firestore的问题

方法:使用Intent传递数据(Android标准做法)

无需导入FormCadastro1类到FormCadastro2,正确的方式是通过Intent的extras传递选中的Spinner值,步骤如下:


1. 修改FormCadastro1,传递Spinner数据

在按钮点击事件中实时获取当前Spinner的选中值,并通过Intent传递到FormCadastro2:

public class FormCadastro1 extends AppCompatActivity {

    Spinner edit_spempr, edit_sparea, edit_spsetor, edit_spcargos;
    Button bt_cadastrar;
    Usuarios usuarios;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_form_cadastro1);
        getSupportActionBar().hide();
        IniciarComponentes();

        // 初始化Spinner适配器
        ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.spItemCargos, android.R.layout.simple_spinner_item);
        edit_spcargos.setAdapter(adapter);

        ArrayAdapter adapter1 = ArrayAdapter.createFromResource(this, R.array.spItemEmpresa, android.R.layout.simple_spinner_item);
        edit_spempr.setAdapter(adapter1);

        ArrayAdapter adapter3 = ArrayAdapter.createFromResource(this, R.array.spItemArea, android.R.layout.simple_spinner_item);
        edit_sparea.setAdapter(adapter3);

        ArrayAdapter adapter2 = ArrayAdapter.createFromResource(this, R.array.spItemSetor, android.R.layout.simple_spinner_item);
        edit_spsetor.setAdapter(adapter2);

        usuarios = new Usuarios();
        bt_cadastrar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 点击按钮时获取Spinner当前选中值
                String empr = edit_spempr.getSelectedItem().toString();
                String area = edit_sparea.getSelectedItem().toString();
                String setor = edit_spsetor.getSelectedItem().toString();
                String cargo = edit_spcargos.getSelectedItem().toString();

                // 创建Intent并添加传递的数据
                Intent intent = new Intent(FormCadastro1.this, FormCadastro2.class);
                intent.putExtra("EMPRESA", empr);
                intent.putExtra("AREA", area);
                intent.putExtra("SETOR", setor);
                intent.putExtra("CARGO", cargo);
                startActivity(intent);
            }
        });
    }

    private void IniciarComponentes() {
        edit_sparea = findViewById(R.id.spArea);
        edit_spempr = findViewById(R.id.spEmpresa);
        edit_spsetor = findViewById(R.id.spSetor);
        edit_spcargos = findViewById(R.id.spCargos);
        bt_cadastrar = findViewById(R.id.btnCadastrar);
    }
}

2. 修改FormCadastro2,接收数据并写入Firestore

在onCreate中获取Intent传递的数据,保存为成员变量,然后在SalvarDadosUsuario中使用:

public class FormCadastro2 extends AppCompatActivity{

    EditText edit_nome, edit_senha, edit_email, edit_confsenha, edit_tel;
    Button bt_Próximo;
    String[] mensagens = {"Preencha todos os campos", "Cadastro realizado com sucesso"};
    String UID;
    String ID;
    TextView MainActivityPasswordError, MainActivityConfirmPassError;
    Usuarios usuarios;
    FirebaseFirestore db = FirebaseFirestore.getInstance();
    
    // 存储从FormCadastro1传递过来的数据
    private String empresa, area, setor, cargo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_form_cadastro2);
        getSupportActionBar().hide();

        IniciarComponentes();
        usuarios = new Usuarios();
        
        // 获取Intent传递的数据
        Intent intent = getIntent();
        empresa = intent.getStringExtra("EMPRESA");
        area = intent.getStringExtra("AREA");
        setor = intent.getStringExtra("SETOR");
        cargo = intent.getStringExtra("CARGO");

        CollectionReference reff = db.collection("Usuarios");
        bt_Próximo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String nome = edit_nome.getText().toString().trim();
                String email = edit_email.getText().toString().trim();
                String senha = edit_senha.getText().toString().trim();
                String tel = edit_tel.getText().toString().trim();

                if (nome.isEmpty() || email.isEmpty() || senha.isEmpty() || tel.isEmpty()) {
                    Snackbar snackbar = Snackbar.make(view, mensagens[0], Snackbar.LENGTH_SHORT);
                    snackbar.setBackgroundTint(Color.WHITE);
                    snackbar.setTextColor(Color.BLACK);
                    snackbar.show();
                } else {
                    CadastrarUsuario(view);
                    Intent intent = new Intent(FormCadastro2.this, FormLogin.class);
                    startActivity(intent);
                }
            }
        });
    }

    public void SalvarDadosUsuario() {
        String nome = edit_nome.getText().toString().trim();
        String email = edit_email.getText().toString().trim();
        String senha = edit_senha.getText().toString().trim();
        String tel = edit_tel.getText().toString().trim();

        UID = FirebaseAuth.getInstance().getCurrentUser().getUid();

        Map<String, Object> usuarios = new HashMap<>();
        usuarios.put("nome", nome);
        usuarios.put("email", email);
        usuarios.put("senha", senha);
        usuarios.put("Tel", tel);
        usuarios.put("empresa", empresa);
        usuarios.put("area", area);
        usuarios.put("setor", setor);
        usuarios.put("cargo", cargo);
        usuarios.put("Login", UID);
        usuarios.put("ID", "");

        db.collection("Usuarios").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    Integer IDS = task.getResult().size();
                    ID = String.valueOf(IDS + 1);
                    DocumentReference documentReference = db.collection("Usuarios").document(ID);
                    documentReference.set(usuarios).addOnSuccessListener(aVoid -> {
                        // 合并update操作,减少网络请求
                        documentReference.update("ID", ID);
                    });
                }
            }
        });
    }

    private void IniciarComponentes() {
        edit_nome = findViewById(R.id.editNome);
        edit_email = findViewById(R.id.editEmail);
        edit_senha = findViewById(R.id.editSenha);
        edit_confsenha = findViewById(R.id.editConfSenha);
        edit_tel = findViewById(R.id.editTel);
        bt_Próximo = findViewById(R.id.btnPróximo);
        // 初始化缺失的TextView
        MainActivityPasswordError = findViewById(R.id.your_password_error_id);
        MainActivityConfirmPassError = findViewById(R.id.your_confirm_password_error_id);
    }

    private boolean ValidaçãoDeSenha() {
        String passwordInput = edit_senha.getText().toString().trim();
        String ConfitmpasswordInput = edit_confsenha.getText().toString().trim();
        if (passwordInput.isEmpty()) {
            MainActivityPasswordError.setText("Field can't be empty");
            return false;
        }
        if (passwordInput.length() < 5) {
            MainActivityPasswordError.setText("Password must be at least 5 characters");
            return false;
        }
        if (!passwordInput.equals(ConfitmpasswordInput)) {
            MainActivityConfirmPassError.setText("Password Would Not be matched");
            return false;
        } else {
            MainActivityConfirmPassError.setText("Password Matched");
            return true;
        }
    }

    public void CadastrarUsuario(View view) {
        String email = edit_email.getText().toString();
        String senha = edit_senha.getText().toString();

        FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, senha).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    SalvarDadosUsuario();
                    Snackbar snackbar = Snackbar.make(view, mensagens[1], Snackbar.LENGTH_SHORT);
                    snackbar.setBackgroundTint(Color.WHITE);
                    snackbar.setTextColor(Color.BLACK);
                    snackbar.show();
                } else {
                    String erro;
                    try {
                        throw task.getException();
                    } catch (FirebaseAuthWeakPasswordException e) {
                        erro = "Digite um senha com no mínimo  6 carácteres";
                    } catch (FirebaseAuthUserCollisionException e) {
                        erro = "Esta conta já foi cadastrada";
                    } catch (FirebaseAuthInvalidCredentialsException e) {
                        erro = "E-mail inválido";
                    } catch (Exception e) {
                        erro = "Erro ao cadastrar usuário";
                    }
                    Snackbar snackbar = Snackbar.make(view, erro, Snackbar.LENGTH_SHORT);
                    snackbar.setBackgroundTint(Color.WHITE);
                    snackbar.setTextColor(Color.BLACK);
                    snackbar.show();
                }
            }
        });
    }
}

关键修正与优化

  1. Spinner值获取时机:原代码在onCreate中提前获取Spinner值,会导致获取初始默认值而非用户选择后的值,改为按钮点击时获取。
  2. Firestore操作合并:将set与update操作合并,减少不必要的网络请求。
  3. 缺失View初始化:补充MainActivityPasswordError和MainActivityConfirmPassError的findViewById调用,避免空指针异常。

内容的提问来源于stack exchange,提问作者Rodrigo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:30:59