首页 > 解决方案 > 使用 Intent 将双精度从一个类传递到另一个类时出现 NullPointerException

问题描述

我正在尝试将一个类(MaterialCollect)中的双精度值传递给另一个类(主活动)。当我尝试定义 rho_m 时,我在主 Activity 类中收到 NullPointerException 错误。我一直在通过双打,但没有成功。我附上了我的 MainActivity、MaterialCollect 和 MatrixBase 类文件。根据 logcat,问题似乎在于没有成功创建新的 Bundle。我是Java新手,谢谢。

public class MainActivity extends Activity{

double rho_m;
double E_maxial;
double E_mtrans;
double UTS_m;
double v_m;

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    Intent intent;
    intent = new Intent(MainActivity.this, MaterialCollect.class);
    startActivity(intent);

    Intent it = new Intent();
    Bundle nylon66params = it.getExtras();
    rho_m = nylon66params.getDouble("nylon66.matrixrho");
    Log.d("print out","THE VALUE OF " + Double.toString(rho_m));


 }}

材料收集类:

public class MaterialCollect extends AppCompatActivity {

MatrixBase nylon66 = new MatrixBase(1140, 2.7e9, 2.7e9, 2800e6, 0.33);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent it = new Intent(MaterialCollect.this, MainActivity.class);
    Bundle nylon66values = new Bundle();
    nylon66values.putDouble("nylon66.matrixrho", nylon66.matrixrho);
    nylon66values.putDouble("nylon66.matrixaxialTmodulus", nylon66.matrixaxialTmodulus);
    nylon66values.putDouble("nylon66.matrixtransTmodulus", nylon66.matrixtransTmodulus);
    nylon66values.putDouble("nylon66.matrixpoissons",nylon66.matrixpoissons);
    nylon66values.putDouble("nylon66.UTS",nylon66.matrixpoissons);
    it.putExtras(nylon66values);
    Log.d("ADebugTag", "Value: " + Double.toString(nylon66.matrixrho));
    startActivity(it);
}}

和 MatrixBase

public class MatrixBase {

double matrixrho;
double matrixaxialTmodulus;
double matrixtransTmodulus;
double matrixpoissons;
double matrixUTS;

MatrixBase(double matrixrho, double matrixaxialTmodulus, double matrixtransTmodulus, double matrixpoissons, double matrixUTS) {
    this.matrixrho = matrixrho;
    this.matrixaxialTmodulus = matrixaxialTmodulus;
    this.matrixtransTmodulus = matrixtransTmodulus;
    this.matrixpoissons = matrixpoissons;
    this.matrixUTS = matrixUTS;
}}

标签: javaandroidandroid-intentnullpointerexceptiondouble

解决方案


根据您发布的内容,我猜您需要在 MainActivity 中取回一个值。

您的 MainActivity 代码不正确(您正在创建一个新的 Bundle,并且您正在回调您的 MaterialCollect Activity)。

您只需要使用从被调用者那里获取额外内容getIntent().getExtras()

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    Bundle b = getIntent().getExtras();
    rho_m = b.getDouble("nylon66.matrixrho");
    if (rho_m != null)
    {
        Log.d("print out","THE VALUE OF " + Double.toString(rho_m));
    }   
 }

推荐阅读