错误是返回数据为空:使用Intent在活动之间发送数据

问题描述

我有3个进度注册活动。我在第一个活动中获取信息,然后尝试直接将第三个活动发送到使用Firebase进行注册。我尝试了各种研究方法,但无法弄清楚。

这是我的第一项活动

signUpNextButton.setonClickListener {

        val name = signUpFullname.text.toString()
        val email = signUpEmail.text.toString()
        val password = signUpPassword.text.toString()
        val repassword = signUpPasswordRepeat.text.toString()

        //Sending datas with this method
        val intent = Intent(this,SignUp_Page3::class.java)
        intent.putExtra("user_email",email)
        intent.putExtra("user_password",password)

        startActivity(Intent(this,SignUp_Page2::class.java))

}

这是第二个

signUpGetCode.setonClickListener {
        startActivity(Intent(this,SignUp_Page3::class.java)) }

这是最后一个

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.signup3)

    val intent = getIntent()
    val email = intent.getStringExtra("user_email")
    val password = intent.getStringExtra("user_password")

    signUpComplete.setonClickListener {

        //Firebase Authentication to create user
        FirebaseAuth.getInstance()
            .createuserWithEmailAndPassword(
                email,password
            )
            .addOnCompleteListener {
                if (it.isSuccessful) {
                    startActivity(Intent(this,LogIn_Page::class.java))
                    Toast.makeText(
                        this,"Account successfully created,please log in.",Toast.LENGTH_LONG
                    ).show()
                    finish()
                } else {
                    Toast.makeText(this,"Something went wrong.",Toast.LENGTH_SHORT).show()
                    return@addOnCompleteListener
                }

            }
    }

解决方法

您似乎正在通过Intent转到第二页,但从未从第二页转到第三页。

首先在第二页和第三页中检索信息。

private var email: String? = null
private var password: String? = null
   
override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        if (intent != null) {
            email = intent.getStringExtra("user_email")
            password = intent.getStringExtra("user_password")
        } else if (savedInstanceState != null){
            email = savedInstanceState.getString("user_email")
            password = savedInstanceState.getString("user_password")
        }

        //TODO rest of onCreate
    }

尝试将信息传递到第三页Intent

在将此数据存储在Intent中时要小心。如果您没有在第二页和第三页中实现onSaveInstanceState,那么您将轮流丢失数据。

override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putString("user_email",email)
        outState.putString("user_password",password)
    }

还可以考虑将静态字符串常量用于您的键,这将使一切变得更易于管理。

,

第一个:

signUpNextButton.setOnClickListener {

        val name = signUpFullname.text.toString()
        val email = signUpEmail.text.toString()
        val password = signUpPassword.text.toString()
        //Sending datas with this method
        val intent = Intent(this,SignUp_Page2::class.java)
        intent.putExtra("user_email",email)
        intent.putExtra("user_password",password)

        //Starting another activity
        startActivity(intent)

    }

second1:

 private var email: String? = null
private var password: String? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.signup2)

    val intent = getIntent()

    if (intent != null) {
        email = intent.getStringExtra("user_email")
        password = intent.getStringExtra("user_password")
    } else if (savedInstanceState != null){
        email = savedInstanceState.getString("user_email")
        password = savedInstanceState.getString("user_password")
    }

    signUpGetCode.setOnClickListener {
        val phone = signUpPhoneNumber.text.toString()

            startActivity(Intent(this,SignUp_Page3::class.java))

    }

}

override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    outState.putString("user_email",email)
    outState.putString("user_password",password)

}

third1:

private var email: String? = null
private var password: String? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.signup3)

    val intent = getIntent()

    if (intent != null) {
        email = intent.getStringExtra("user_email")
        password = intent.getStringExtra("user_password")
    } else if (savedInstanceState != null) {
        email = savedInstanceState.getString("user_email")
        password = savedInstanceState.getString("user_password")
    }

    signUpComplete.setOnClickListener {

        Toast.makeText(this,email + password,Toast.LENGTH_SHORT).show()

    }

}

override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    outState.putString("user_email",password)

}

Toast消息给了我null null输出。

,
FirebaseAuth.getInstance()
            .createUserWithEmailAndPassword(
                email.toString(),password.toString()
            )
            .addOnCompleteListener {
                if (it.isSuccessful) {
                    startActivity(Intent(this,LogIn_Page::class.java))
                    Toast.makeText(
                        this,"Account successfully created,please log in.",Toast.LENGTH_LONG
                    ).show()
                } else {
                    Toast.makeText(this,"Something went wrong.",Toast.LENGTH_SHORT).show()
                    return@addOnCompleteListener
                }

            }

这向我返回“出了点问题”