esap01
esap01

Reputation: 15

NullPointerException on Intent between two Activities

I am trying to send an Intent value between two activities, though it appears, having read this, that in my second activity, the received intent is null; having encoutnered an NPE at runtime.

The intended functionality behind this is: 'the user scans a code in Activity A' -> 'a true value received and packed into an intent' -> 'Activity B opens, unpacks the intent and checks that the intent value is true' -> 'if true, the height of an ImageView in the activity is reduced by a set amount'.

I am therefore, not sure why my Intent is received as null in Activity B, as I would like this check to happen so that the height is updated when the activity opens?

Activity 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();
}

Activity 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);
    }

Upvotes: 1

Views: 180

Answers (3)

Aalap Patel
Aalap Patel

Reputation: 2076

You can get string value by using intent.getStringExtra() method like this in your second activity.

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

Upvotes: 0

Aakash Jain
Aakash Jain

Reputation: 87

You can use :

In first activity ( MainActivity page )

Intent i = new Intent(MainActivity.this,SecondActivity.class); 
 i.putExtra("QRmethod","readComplete" );
then you can get it from your second activity by :

In second activity ( SecondActivity page )

Intent intent = getIntent();
String YourtransferredData = intent.getExtras().getString("QRmethod");

Upvotes: 1

Karan Bhagat
Karan Bhagat

Reputation: 329

In Activity B you have a typo while pulling QRMethod from the Intent extras. You are using QRmethod while you have set extras with 'QRMethod'.

Upvotes: 2

Related Questions