1

I am fairly new to android and am writing an app that will solve physics problems. The math is going well thanks to some help from these forums, but when I try to start my activity from a list it comes up with a nullpointerexception in the onCreate Method of the new activity. This doesn't seem to make much sense though, because all thats there is a submit button that executes the math from some EditText views. Here is my code.

package android.physicsengine;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import java.lang.Math;

public class ProjectileMotion extends Activity {

 private EditText acceleration;
 private EditText finalVelocity;
 private EditText initialVelocity;
 private EditText time;
 private EditText deltay;
 private EditText velocity;
 private EditText deltax;
 private Button submitButton;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.projectile_motion_layout);

  submitButton.setOnClickListener(new OnClickListener() { 
   @Override
   public void onClick(View v) {
    acceleration = (EditText)findViewById(R.id.acceleration);
    double a = Doublify(acceleration);

    finalVelocity = (EditText)findViewById(R.id.finalVelocity);
    double vf = Doublify(finalVelocity);

    initialVelocity = (EditText)findViewById(R.id.intitialVelocity);
    double vi = Doublify(initialVelocity);

    time = (EditText)findViewById(R.id.time);
    double t = Doublify(time);

    deltay = (EditText)findViewById(R.id.deltay);
    double y = Doublify(deltay);

    velocity = (EditText)findViewById(R.id.velocity);
    double vx = Doublify(velocity);

    deltax = (EditText)findViewById(R.id.deltax);
    double x = Doublify(deltax);


    //Y Axis
    if(time.getText()==null && deltay.getText()==null){
     time.setText(Double.toString((vf-vi)/a));
     deltay.setText(Double.toString(((vf-vi)/a)+(a*Math.pow(((vf-vi)/a),2))));
    }
    if(acceleration.getText()==null && deltay.getText()==null){
     acceleration.setText(Double.toString((vf-vi)/t));
     deltay.setText(Double.toString((vi*t+.5*((vf-vi)/t))*Math.pow(t,2)));
    }
    if(acceleration.getText()==null && time.getText()==null){
     acceleration.setText(Double.toString(((Math.pow(vf,2)-Math.pow(vi,2)))/2*y));
     time.setText(Double.toString(2*y*(vf-vi)/(Math.pow(vf,2)-vi)));
    }
    if(initialVelocity.getText()==null && deltay.getText()==null){
     initialVelocity.setText(Double.toString(vf-a*t));
     deltay.setText(Double.toString((vf-a*t)*t+.5*a*Math.pow(t,2)));
    }
    if(initialVelocity.getText()==null && time.getText()==null){
     initialVelocity.setText(Double.toString(Math.sqrt(Math.pow(vf,2)-2*a*y)));
     time.setText(Double.toString((vf-Math.sqrt(Math.pow(vf,2)-2*a*y))/2));
    }
    if(initialVelocity.getText()==null && acceleration.getText()==null){
     initialVelocity.setText(Double.toString(vf-2*(vf-y/t)));
     acceleration.setText(Double.toString((2/t)*(vf-y/t)));
    }
    if(finalVelocity.getText()==null && deltay.getText()==null){
     finalVelocity.setText(Double.toString(vi+a*t));
     deltay.setText(Double.toString(vi*t+.5*a*Math.pow(t,2)));
    }
    if(finalVelocity.getText()==null && time.getText()==null){
     finalVelocity.setText(Double.toString(Math.sqrt(Math.pow(vi,2)+2*a*y)));
     time.setText(Double.toString(((Math.sqrt(Math.pow(vi,2)+2*a*y)-vi))/a));
    }
    if(finalVelocity.getText()==null && acceleration.getText()==null){
     acceleration.setText(Double.toString(2*(y-vi*t)/Math.pow(t,2)));
     finalVelocity.setText(Double.toString(vi+(2*(y-vi*t)/t)));
    }
    if(finalVelocity.getText()==null && initialVelocity.getText()==null){
     initialVelocity.setText(Double.toString((y-.5*a*Math.pow(t,2))/t));
     finalVelocity.setText(Double.toString((y-.5*a*Math.pow(t,2))/t)+a*t);
    }

   }   

  });

 }
 private double Doublify(EditText editText){
  if(editText.getText()!= null){
   return Double.parseDouble(editText.getText().toString());
  }
  return 0;
 }

}

and the XML

<?xml version="1.0" encoding="utf-8"?>
<TableLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical">
   <TableRow>
    <TextView android:text="Projectile Motion Engine"
        android:textSize="25dip"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_span="4"
        android:layout_gravity="center" />    
   </TableRow>
   <TableRow>
    <TextView android:text="X axis"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_span="2"
        android:textStyle="bold"/>  
    <TextView android:text="Y axis"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_span="2"
        android:textStyle="bold"/>  
   </TableRow>
   <TableRow>
    <TextView android:text="accel(m/s^2)="
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <EditText android:id="@+id/acceleration"
        android:text="9.8"
        android:inputType="numberDecimal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <TextView android:text="deltax(m)="
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <EditText android:id="@+id/deltax"
        android:inputType="numberDecimal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
   </TableRow>
   <TableRow>
    <TextView android:text="init v(m/s)="
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <EditText android:id="@+id/intitialVelocity"
        android:inputType="numberDecimal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <TextView android:text="v ="
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <EditText android:id="@+id/velocity"
        android:inputType="numberDecimal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
   </TableRow>
   <TableRow>
    <TextView android:text="final v(m/s)="
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <EditText android:id="@+id/finalVelocity"
        android:inputType="numberDecimal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <TextView android:text="time(s)="
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <EditText android:id="@+id/time"
        android:inputType="numberDecimal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
   </TableRow>
   <TableRow>
    <TextView android:text="deltay(m)="
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <EditText android:id="@+id/deltay"
        android:inputType="numberDecimal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
  <Button android:id="@+id/submitButton"
    android:layout_width="fill_parent"
      android:layout_height="wrap_content" 
      android:layout_span="2"
      android:text="Launch" />
   </TableRow>

</TableLayout>
2
  • 3
    For future reference, if you have a large block of code, you can format it by highlighting the code block and hitting the {} button. Using backticks only works for inline code, IIRC. Commented Jan 20, 2011 at 19:49
  • Post the StackTrace and identify which line it throw. Commented Jan 20, 2011 at 19:53

3 Answers 3

4
 super.onCreate(savedInstanceState);
  setContentView(R.layout.projectile_motion_layout);

  submitButton.setOnClickListener(new OnClickListener() { 

You forgot to assign your submitButton (with findViewById)

  super.onCreate(savedInstanceState);
  setContentView(R.layout.projectile_motion_layout);
  submitButton = (Button) findViewById((R.id.submitButton); // new line
  submitButton.setOnClickListener(new OnClickListener() { 
Sign up to request clarification or add additional context in comments.

Comments

2

Based on the code you've posted, it appears that you call submitButton.setOnClickListener(new OnClickListener() { before instantiating submitButton with a value. This would cause a NullPointer

1 Comment

Thank you. That was exactly the problem.
0

projectile_motion_layout may not be in your android manifest. I would check that first.

You can find the Application Nodes under the Application tab in the manifest.

3 Comments

I'm sorry but I'm still kinda new at this. How do I add the layout to the manifest. I have added the Activity already:
If your Activity is listed under the "Application Nodes" section in the Application tab in the manifest that's all you need to do. I would start debugging by commenting out everything except for the basics, make sure that works, and work from there. You can also set breakpoints by double clicking the line numbers and making sure debuggable is set to true in the manifest.
Thank you, but it is apparently correctly registered in the manifest. Thanks for the help, though.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.