2013-02-06 50 views
0

我有一個簡單的應用程序,從文本框中乘以兩個數字,並在第三個框中顯示結果。代碼中沒有任何語法錯誤,但在運行應用程序時出現此錯誤:應用程序意外停止。在活動的onCreate中的Android NullPointer異常

下面是Java代碼:

package c.example.rectangle; 

import android.os.Bundle; 

import android.view.View; 
import android.app.Activity; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class MainActivity extends Activity implements OnClickListener{ 

    EditText l = (EditText) findViewById(R.id.length); 
    EditText w = (EditText) findViewById(R.id.width); 
    TextView a = (TextView) findViewById(R.id.lblarea); 
    Button b = (Button) findViewById(R.id.calculate); 


    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     b.setOnClickListener(this); 

    } 

    public void onClick(View v) { 
     calculateRectangle(l.getText().toString(), w.getText().toString()); 


    } 
    private void calculateRectangle(String clength, String cwidth){ 


     int area = Integer.parseInt(clength)*Integer.parseInt(cwidth); 

     b.setText(String.valueOf(area)); 
}} 

這裏是我的XML文件。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#8B4513" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/label1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:layout_marginTop="20dp" 
     android:background="#2F4F4F" 
     android:gravity="center" 
     android:text="@string/rect" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="#8B4513" 
     android:orientation="horizontal" > 

     <TextView 
      android:id="@+id/label2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="30dp" 
      android:layout_marginTop="50dp" 
      android:background="#2F4F4F" 
      android:gravity="center" 
      android:text="@string/cm" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

     <EditText 
      android:id="@+id/length" 
      android:layout_width="110dp" 
      android:layout_height="21dp" 
      android:layout_marginLeft="40dp" 
      android:layout_marginTop="50dp" 
      android:background="#2F4F4F" 
      android:ems="10" 
      android:gravity="center" 
      android:inputType="number" /> 


    </LinearLayout> 

<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="#8B4513" 
     android:orientation="horizontal" > 

    <TextView 
     android:id="@+id/label3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="#2F4F4F" 
     android:layout_marginLeft="30dp" 
     android:layout_marginTop="20dp" 
     android:text="@string/breadth" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <EditText 
     android:id="@+id/width" 
     android:layout_width="110dp" 
     android:layout_height="21dp" 
     android:layout_marginLeft="33dp" 
     android:layout_marginTop="20dp" 
     android:background="#2F4F4F" 
     android:inputType="number" 
     android:ems="10" 
     android:gravity="center" 
     > 

     <requestFocus /> 
    </EditText> 

</LinearLayout> 

<Button 
    android:id="@+id/calculate" 
    android:layout_width="fill_parent" 
    android:layout_marginLeft="100dip" 
    android:layout_marginRight="100dip" 
    android:layout_height="wrap_content" 
    android:text="@string/calculate" 
    android:layout_marginTop="20dp" /> 

<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="#8B4513" 
     android:orientation="horizontal" > 

<TextView 
    android:id="@+id/label4" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="30dp" 
    android:layout_marginTop="20dp" 
    android:background="#2F4F4F" 
    android:text="@string/area" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 

<TextView 
    android:id="@+id/lblarea" 
    android:layout_width="110dp" 
    android:layout_height="21dp" 
    android:layout_marginLeft="60dp" 
    android:layout_marginTop="20dp" 
    android:background="#2F4F4F" 
    android:gravity="center"/> 
</LinearLayout> 
    </LinearLayout> 

請幫忙。

+0

我是新來的Android,我不知道該怎麼做。我在logcat中,但有很多行我無法複製和粘貼。其中一些是紅色的。請幫忙。 – Peter

回答

0

重新安排你的代碼看起來像這樣:

EditText l; 
EditText w; 
TextView a; 
Button b; 

    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    l = (EditText) findViewById(R.id.length); 
    w = (EditText) findViewById(R.id.width); 
    a = (TextView) findViewById(R.id.lblarea); 
    b = (Button) findViewById(R.id.calculate); 
+0

現在應用程序打開,但不顯示在TextView中的計算結果「lblarea」:( – Peter

+0

這是因爲你正在設置文本到按鈕。 使用a.setText而不是b.setText –

+0

好吧我知道了。剛剛重新啓動日食和它的工作。謝謝你。 – Peter

1

我知道,你有正確的答案,但我只是想,爲什麼你需要爲@ Mr.Me說,編寫代碼來解釋你。

你在課程開始時描述你的視圖元素,並試圖在那裏初始化它們。這是不正確的。因爲在構造函數將運行Views對象的初始化時,您尚未將佈局文件附加到活動。正如你所看到的,你正在使用findViewById()方法,但在使用它之前你應該調用setContentView()。

爲了更好的理解,請閱讀Activity Lifecycle,注意渲染過程。

+0

的問題活動的上下文不會準備好,試圖在onCreate從未爲我工作之前訪問佈局充氣器 –

+0

是的,在onCreate()未完成之前,活動不允許使用其視圖元素進行操作 –