2013-02-06 76 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()未完成之前,活动不允许使用其视图元素进行操作 –