Java 两个活动之间意图上的NullPointerException

Java 两个活动之间意图上的NullPointerException,java,android,android-intent,android-activity,Java,Android,Android Intent,Android Activity,我试图在两个活动之间发送一个Intent值,尽管读过之后发现,在我的第二个活动中,接收到的Intent为null;在运行时输入了NPE 这背后的预期功能是:“用户扫描活动a中的代码”->“接收并打包到意图中的真实值”->“活动B打开、解压缩意图并检查意图值是否真实”->“如果为真,则活动中图像视图的高度将减少设定的量” 因此,我不确定为什么我的意图在活动B中被接收为空,因为我希望进行此检查,以便在活动打开时更新高度 活动A: //do the handling of the scanned co

我试图在两个活动之间发送一个Intent值,尽管读过之后发现,在我的第二个活动中,接收到的Intent为null;在运行时输入了NPE

这背后的预期功能是:“用户扫描活动a中的代码”->“接收并打包到意图中的真实值”->“活动B打开、解压缩意图并检查意图值是否真实”->“如果为真,则活动中图像视图的高度将减少设定的量”

因此,我不确定为什么我的意图在活动B中被接收为空,因为我希望进行此检查,以便在活动打开时更新高度

活动A:

//do the handling of the scanned code being true and display 
//a dialog message on screen to confirm this 
@Override
public void handleResult(Result result) {
    final String myResult = result.getText();
    Log.d("QRCodeScanner", result.getText());
    Log.d("QRCodeScanner", result.getBarcodeFormat().toString());

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Activity Complete!");
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        //the user has pressed the OK button
        @Override
        public void onClick(DialogInterface dialog, int which) {
            scannerView.resumeCameraPreview(QRActivity.this);
            //pack the intent and open our Activity B
            Intent intent = new Intent(QRActivity.this, ActivityTank.class);
            intent.putExtra("QRMethod", "readComplete");
            startActivity(intent);

        }
    });

    builder.setMessage(result.getText());
    AlertDialog alert1 = builder.create();
    alert1.show();
}
活动B:

// in onCreate, I check that the bundled intent is true
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tank);

    if (savedInstanceState == null) {
        Bundle extras = getIntent().getExtras();
        if (extras == null) {
            //then the extras bundle is null, and nothing needs to be called here
        }
        else {
            String method = extras.getString("QRmethod");

            if (method.equals("readComplete")) {
                updateTank();
            }
        }
    }
}

//this is the method that is called when the intent check is true

public int tHeight = 350;

public void updateTank() {
    ImageView tankH = (ImageView)findViewById(R.id.tankHeight);
    ViewGroup.LayoutParams params = tankH.getLayoutParams();
    params.height = tHeight - 35;
    tankH.setLayoutParams(params);
    }

在活动B中,从意图附加项中提取QRMethod时出现输入错误。您使用的是
QRmethod
,而您已经用'QRmethod'设置了额外功能。

您可以使用:

在第一个活动中(主活动页面)

在第二个活动中(第二个活动页面)


您可以在第二个活动中使用类似的
intent.getStringExtra()
方法来获取字符串值

if (getIntent() != null){
   getIntent().getStringExtra("QRmethod") //this s your "readComplete" value
}

intent.getExtras().getString(“QRmethod”)可以通过NPE直接处理NullPointerException(如果未传递任何额外内容)。此NPE是U处理的,将使应用程序崩溃。这就是为什么您必须使用:
intent.getStringExtra(“QRmethod”)
,如果没有键
“QRmethod”
的额外值,它将返回
null
,并且不会使应用程序崩溃。可能是
Intent intent = getIntent();
String YourtransferredData = intent.getExtras().getString("QRmethod");
if (getIntent() != null){
   getIntent().getStringExtra("QRmethod") //this s your "readComplete" value
}