Android使用Intent向第二个Activity传递变量时返回NULL如何解决
问题原因
- 存取类型不匹配:你在Cart页面往Intent存入的
totalPax是Int类型、finTotal是Double类型,但在CheckoutScreen页面使用getStringExtra()读取,类型不对应自然返回null。 - 拼写隐患:你传值用的key是
toalPax(少了t的拼写错误),虽然只要两端一致不影响取值,但建议修正为正确拼写避免后续维护踩坑。 - 额外优化提示:你的数值计算逻辑写在ListView的
getView方法中,getView每渲染一个列表项、滚动列表都会被反复调用,会导致金额重复累加、数值错误,建议将金额统计逻辑移到适配器初始化时统一遍历计算一次。
修正方案
修改CheckoutScreen.kt中读取Intent参数的代码,使用对应类型的读取方法即可:
import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Toast class CheckoutScreen : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_checkout_screen) // 用对应类型的get方法读取,第二个参数为读取失败时返回的默认值 val pax = intent.getIntExtra("toalPax", 0) val cst = intent.getDoubleExtra("finTotal", 0.0) Toast.makeText(applicationContext, "Testing = $pax and $cst", Toast.LENGTH_SHORT).show() } }
如果要修正key的拼写错误,同时修改Cart里传值的代码和上面的读取代码即可:
Cart里传值部分修改为:
fun continueToCheckoutInformation(view: View) { val intent = Intent(this@Cart, CheckoutScreen::class.java) // 修正key的拼写 intent.putExtra("totalPax", totalPax) intent.putExtra("finTotal", finTotal) startActivity(intent) }
对应CheckoutScreen里读取改为:
val pax = intent.getIntExtra("totalPax", 0) val cst = intent.getDoubleExtra("finTotal", 0.0)
内容的提问来源于stack exchange,提问作者Tanav Sharma
相关产品推荐
相关产品推荐

