在方法中设置OnClickListener时的NullPointerExeption

时间:2015-07-01 10:30:31

标签: java android nullpointerexception

我正在创建地址簿,但是当我从XML添加新号码和获取按钮时,我得到了NullPointerException。 这是导致错误的代码

package oo.seniorlauncher.com.o_seniorlauncher;

import oo.seniorlauncher.com.o_seniorlauncher.util.SystemUiHider;

import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;



public class newNumber extends Activity {

boolean ready = false;
EditText nameField;
EditText numberField;
Context context;

String name;
String number;
String place= "";
public boolean ready(){

    return ready;

}

public void run(String plac,Context context){
    this.context = context;
   place = plac;
    MainFrame frame = new MainFrame();
    ((Activity) context).setContentView(R.layout.adnumber);
   set();
}public void sey(){
// this causes the error Button button= (Button)findViewById(R.id.readyButton); 
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            nameField = (EditText) findViewById(R.id.NameField);
            numberField = (EditText)findViewById(R.id.Number);
            name = nameField.getText().toString();
            number =numberField.getText().toString();
            MainFrame frame = new MainFrame();
            frame.adName(name,place);
            frame.adNumber(number, place);
            ((Activity) context).setContentView(R.layout.adnumber);
        }
    });
}

这是错误

  java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
        at android.app.Activity.findViewById(Activity.java:2072)
        at oo.seniorlauncher.com.o_seniorlauncher.newNumber.set(newNumber.java:60)
        at oo.seniorlauncher.com.o_seniorlauncher.newNumber.run(newNumber.java:58)
        at oo.seniorlauncher.com.o_seniorlauncher.MainFrame$3.onClick(MainFrame.java:116)
        at android.view.View.performClick(View.java:4780)
        at android.view.View$PerformClick.run(View.java:19866)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5257)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

这是我的XMl文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="oo.seniorlauncher.com.o_seniorlauncher.newNumber">


<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="Syötä"
    android:id="@+id/textView"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:height="100dp"
    android:textSize="50dp" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="numero"
    android:id="@+id/textView2"
    android:layout_alignParentTop="true"
    android:layout_alignBottom="@+id/textView"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:width="250dp"
    android:textSize="50dp" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="ja nimi"
    android:id="@+id/textView3"
    android:height="100dp"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginTop="66dp"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:textSize="50dp" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="textPersonName"
    android:ems="10"
    android:id="@+id/NameField"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:textSize="50dp"
    android:layout_centerVertical="true"
    android:text="Nimi" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="phone"
    android:ems="10"
    android:id="@+id/Number"
    android:layout_below="@+id/NameField"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:textSize="50dp"
    android:text="Numero"
    android:phoneNumber="true" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Valmis"
    android:id="@+id/readyButton"
    android:layout_below="@+id/Number"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:textSize="75dp" />

</RelativeLayout>

我几乎尝试了所有内容,但我不知道导致错误的原因。

4 个答案:

答案 0 :(得分:1)

您必须使用onCreate方法设置内容视图:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.adnumber);
}

答案 1 :(得分:1)

您的活动应采用onCreate()方法,初始化您的观看次数。

像这样:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.adnumber);
    //initialize your views here
    nameField = (EditText) findViewById(R.id.NameField);
    numberField = (EditText)findViewById(R.id.Number);


}

答案 2 :(得分:0)

您必须通过setContentView("your_layout_ID")将内容视图设置为活动,并且应该将来自XML文件的所有窗口小部件的代码放在onCreate函数上。

答案 3 :(得分:0)

不要听那些建议将setContentView()移动到onCreate()的其他人......这真的是最好的,但你可以把它设置在你想要的地方......直到你这样做,你才会有黑屏。有些人不知道Android是如何工作的,只是从教程中复制了代码。您希望构建,扩充和填充活动的视图层次结构可以随时完成,所以一切都会好的;)

据说这会向我们展示xml文件

编辑:在执行任何findviewbyid之前,您必须设置内容vew,以便您可以引用内存中的单个对象,否则您将获得nullpointer异常:)