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

Android Studio跨Activity传值后计算崩溃问题求助

排查Main2Activity计算kaloriseminggu时的崩溃问题

看起来你在处理从MainActivity传递过来的kaloriseminggu数据并进行除法运算时遇到了崩溃,我来帮你分析下可能的问题和修复方案:

常见崩溃原因分析

你的两个版本代码崩溃大概率是以下几种情况:

  • 从Intent Bundle中获取的kaloriseminggu值为null,或者是空字符串,或者包含非数字字符(比如带单位、标点),导致数字转换异常(NumberFormatException)
  • 传递的数值超出了Integer的取值范围(第一个版本用Integer.valueOf时容易出现)
  • 第二个版本中直接从TextView读取文本转换,但如果data.getString("kaloriseminggu")是null,TextView会显示字符串"null",这显然无法解析为数字

针对两个版本的修复方案

修复第一个版本代码

第一个版本用整数处理,适合kaloriseminggu是整数的场景,重点要处理null和转换异常,同时记得把计算结果设置到TextView:

package stmikbumigoramataram.simulasipemodelan;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

public class Main2Activity extends AppCompatActivity {
    public TextView ttkalorisehari, ttkaloriseminggu,txtbb;
    int naik_bb,nilai_bb;

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

        Bundle data = getIntent().getExtras();
        ttkalorisehari = findViewById(R.id.tjml_kal);
        ttkaloriseminggu = findViewById(R.id.tjml_kal_seminggu);
        txtbb = findViewById(R.id.tnaik_bb);

        // 先检查Bundle是否为空,避免空指针
        if(data == null){
            Toast.makeText(this, "没有接收到数据", Toast.LENGTH_LONG).show();
            return;
        }

        String kaloriHari = data.getString("kalorisehari");
        String kaloriMinggu = data.getString("kaloriseminggu");

        // 处理null情况,设置默认文本
        ttkalorisehari.setText(kaloriHari == null ? "0" : kaloriHari);
        ttkaloriseminggu.setText(kaloriMinggu == null ? "0" : kaloriMinggu);

        try {
            // 直接从Bundle取字符串,避免TextView可能的格式问题
            nilai_bb = Integer.parseInt(kaloriMinggu == null ? "0" : kaloriMinggu);
            naik_bb = nilai_bb / 7000;
            // 别忘了把结果设置到txtbb上!你之前的代码没做这一步
            txtbb.setText(String.valueOf(naik_bb));
        }catch (NumberFormatException e){
            Toast.makeText(this, "kaloriseminggu格式错误:" + e.getMessage(), Toast.LENGTH_LONG).show();
            txtbb.setText("0");
        }
    }
}

修复第二个版本代码

第二个版本用浮点数处理,适合需要保留小数的场景,同样要处理null和转换异常,并且尽量直接从Bundle取数据:

package stmikbumigoramataram.simulasipemodelan;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import java.text.DecimalFormat;

public class Main2Activity extends AppCompatActivity {
    public TextView ttkalorisehari, ttkaloriseminggu,txtbb;
    double naik_bb;

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

        Bundle data = getIntent().getExtras();
        ttkalorisehari = findViewById(R.id.tjml_kal);
        ttkaloriseminggu = findViewById(R.id.tjml_kal_seminggu);
        txtbb = findViewById(R.id.tnaik_bb);

        // 先检查Bundle是否为空
        if(data == null){
            Toast.makeText(this, "没有接收到数据", Toast.LENGTH_LONG).show();
            return;
        }

        String kaloriHari = data.getString("kalorisehari");
        String kaloriMinggu = data.getString("kaloriseminggu");

        // 处理null情况
        ttkalorisehari.setText(kaloriHari == null ? "0" : kaloriHari);
        ttkaloriseminggu.setText(kaloriMinggu == null ? "0" : kaloriMinggu);

        try {
            // 直接从Bundle获取,避免TextView的"null"字符串问题
            double nilai_bb = Double.parseDouble(kaloriMinggu == null ? "0" : kaloriMinggu);
            DecimalFormat df = new DecimalFormat("#.##");
            naik_bb = nilai_bb / 7000;
            txtbb.setText(df.format(naik_bb));
        }catch (NumberFormatException e){
            Toast.makeText(this, "kaloriseminggu格式错误:" + e.getMessage(), Toast.LENGTH_LONG).show();
            txtbb.setText("0.00");
        }
    }
}

额外优化建议

  1. 建议直接传递数值而非字符串:在MainActivity中传递数据时,最好用putInt或putDouble,而不是putString,这样避免字符串转换的问题:

    // MainActivity中传递数据的代码示例
    Intent intent = new Intent(MainActivity.this, Main2Activity.class);
    intent.putExtra("kalorisehari", 1500); // 假设是整数
    intent.putExtra("kaloriseminggu", 10500);
    startActivity(intent);
    

    然后在Main2Activity中直接取数值:

    int kaloriMinggu = data.getInt("kaloriseminggu", 0); // 第二个参数是默认值
    
  2. 检查MainActivity的传递逻辑:确保传递的键名是kaloriseminggu,和Main2Activity中获取的键名完全一致(大小写敏感),避免因为键名不匹配导致获取到null。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:28:44