Question

I'm new to Android Programming world and this is driving me crazy. Any help would be appreciated ! Everything works fine except the intent putextra , getextra code part. Since when I added this part to the project, whenever I click on a button which would teorically start a new activity, force closes.

Below is MainActivity.java

public class MainActivity extends Activity {

EditText inputA, inputB, inputC;
TextView nrRoots, root1, root2, roots;
Button bStepByStep, calculate;
Double a, b, c, D, x1, x2, x, dRootNr;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    inputA = (EditText) findViewById(R.id.etParamA);
    inputB = (EditText) findViewById(R.id.etParamB);
    inputC = (EditText) findViewById(R.id.etParamC);
    nrRoots = (TextView) findViewById(R.id.tvNrRoots);
    root1 = (TextView) findViewById(R.id.tvRoot1);
    roots = (TextView) findViewById(R.id.tvRoots);
    root2 = (TextView) findViewById(R.id.tvRoot2);
    calculate = (Button) findViewById(R.id.bCalculate);
    bStepByStep = (Button) findViewById(R.id.bStepByStep);

    calculate.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            a = Double.parseDouble(inputA.getText().toString());
            b = Double.parseDouble(inputB.getText().toString());
            c = Double.parseDouble(inputC.getText().toString());

            double D = Math.sqrt((b * b) - (4 * a * c));

            if (D == 0) {
                nrRoots.setText("The equation " + a + "x^2+" + b + "x+" + c
                        + "=0 has 1 distinct root.");
                x = ((-1) * b) / (2 * a);
                root1.setText("x=" + x);
                root2.setText("");
                roots.setText("");
            } else if (D > 0) {
                nrRoots.setText("The equation " + a + "x^2+" + b + "x+" + c
                        + "=0 has 2 distinct roots.");
                x1 = (((-1) * b) + D) / (2 * a);
                x2 = (((-1) * b) - D) / (2 * a);
                root1.setText("x1= " + x1);
                root2.setText("x2= " + x2);
            } else {
                nrRoots.setText("The equation " + a + "x^2+" + b + "x+" + c
                        + "=0 has no distinct roots.");
                root1.setText("");
                root2.setText("");
            }

        }

    });

    bStepByStep.setOnClickListener(new OnClickListener() {
        public void onClick(View arg0) {

            Intent i = new Intent(MainActivity.this, NewActivity.class);
            i.putExtra("a", a);
            i.putExtra("b", b);
            i.putExtra("c", c);
            i.putExtra("D", D);
            i.putExtra("x1", x1);
            i.putExtra("x2", x2);
            startActivity(i);
            finish(); 
        }
    });

}

}

here is NewActivity.java

public class NewActivity extends Activity {

Intent i = getIntent();
Double a = i.getExtras().getDouble("a"); 
Double b = i.getExtras().getDouble("b");
Double c = i.getExtras().getDouble("c");
Double D = i.getExtras().getDouble("D");
Double x1 = i.getExtras().getDouble("x1");
Double x2 = i.getExtras().getDouble("x2");
TextView bb;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.new_activity); 
    bb = (TextView) findViewById(R.id.tvArbli);
    bb.setText("a=" + a + " " + b + " " + c + " " + D + " " + x1 + " " + x2);
}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    finish();
}

}

What am I doing wrong ?

Was it helpful?

Solution

You can't retrieve the intent during class instansiation.

Change your code to something like this...

public class NewActivity extends Activity {

    Intent i;
    TextView bb;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.new_activity); 

        i = getIntent();

        Double a = i.getExtras().getDouble("a"); 
        Double b = i.getExtras().getDouble("b");
        Double c = i.getExtras().getDouble("c");
        Double D = i.getExtras().getDouble("D");
        Double x1 = i.getExtras().getDouble("x1");
        Double x2 = i.getExtras().getDouble("x2");

        bb = (TextView) findViewById(R.id.tvArbli);
        bb.setText("a=" + a + " " + b + " " + c + " " + D + " " + x1 + " " + x2);
    }

PS You need to do a lot of validation!

Also, always include you logcat (stack trace) for any sort of crash.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top