2011-01-20 61 views
1

我是相當新的Android和我寫這將解決物理問題的應用程序。數學進展順利得益於這些論壇一些幫助,但是當我試圖從它與新活動的onCreate方法一個NullPointerException出現列表中開始我的活動。這似乎並沒有太大的意義,但因爲所有這就是有一個提交按鈕,從某些觀點的EditText執行數學。這是我的代碼。的NullPointerException在Android的程序中的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; 
} 

} 

和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

以供將來參考,如果你有一大塊代碼,您可以通過突出顯示的代碼塊擊中了`{}`按鈕對其進行格式化。使用反引號僅適用於內聯代碼IIRC。 – eldarerathis 2011-01-20 19:49:35

+0

發佈StackTrace並確定它拋出哪一行。 – 2011-01-20 19:53:15

回答

2

根據您所發佈的代碼,看來你叫 submitButton.setOnClickListener(新OnClickListener(){ 前實例提交按鈕有一個值。這將導致一個空指針

0

projectile_motion_layout可能不會在你的Android清單。我會先檢查一下。

您可以在清單中的應用程序選項卡下的應用節點。

+1

對不起,但我還是有點新。如何將佈局添加到清單。如果你的活動是在這一切你需要做的清單應用程序選項卡中的「應用程序節點」一節中列出 – 2011-01-20 19:56:59

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

    submitButton.setOnClickListener(new OnClickListener() { 

你忘了你的分配submitButton(與findViewById

super.onCreate(savedInstanceState); 
    setContentView(R.layout.projectile_motion_layout); 
    submitButton = (Button) findViewById((R.id.submitButton); // new line 
    submitButton.setOnClickListener(new OnClickListener() { 
相關問題