2011-01-20 2 views
1

Je suis assez nouveau pour android et j'écris une application qui résoudra des problèmes de physique. Le calcul se passe bien grâce à l'aide de ces forums, mais lorsque j'essaie de démarrer mon activité à partir d'une liste, elle crée une exception nullpointer dans la méthode onCreate de la nouvelle activité. Cela ne semble pas avoir beaucoup de sens cependant, parce que tout cela est un bouton de soumission qui exécute le calcul à partir de certaines vues EditText. Voici mon code.NullPointerException dans le programme Android dans onCreate()

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

} 

et 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> 
+3

Pour référence future, si vous avez un gros bloc de code, vous pouvez le formater en mettant en surbrillance le bloc de code et en appuyant sur le bouton '{}'. L'utilisation de guillemets ne fonctionne que pour le code en ligne, IIRC. – eldarerathis

+0

Publiez le StackTrace et identifiez la ligne qu'il lance. –

Répondre

2

Basé sur le code que vous avez posté, il semble que vous appelez submitButton.setOnClickListener (nouvelle OnClickListener() { avant instanciation de submitButton avec une valeur Cela provoquerait un NullPointer

+0

Merci. C'était exactement le problème. –

0

projectile_motion_layout ne peut pas être dans votre manifeste Android. Je vérifierais cela en premier.

Vous pouvez trouver les nœuds d'application sous l'onglet Application du manifeste.

+1

Je suis désolé mais je suis encore un peu nouveau à ce sujet. Comment ajouter la mise en page au manifeste J'ai déjà ajouté l'activité: –

+0

Si votre activité est répertoriée sous la section "Noeuds d'application" dans l'onglet Application du manifeste, c'est tout ce que vous devez faire. Je commencerais à déboguer en commentant tout sauf les bases, m'assurer que cela fonctionne, et travailler à partir de là. Vous pouvez également définir des points d'arrêt en double-cliquant sur les numéros de ligne et en vous assurant que le débogage est défini sur true dans le manifeste. – wajiw

+0

Merci, mais il est apparemment correctement inscrit dans le manifeste. Merci pour l'aide en tout cas. –

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

    submitButton.setOnClickListener(new OnClickListener() { 

Vous avez oublié d'affecter votre submitButton (avec findViewById)

super.onCreate(savedInstanceState); 
    setContentView(R.layout.projectile_motion_layout); 
    submitButton = (Button) findViewById((R.id.submitButton); // new line 
    submitButton.setOnClickListener(new OnClickListener() { 
Questions connexes