我正在创建地址簿,但是当我从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>
我几乎尝试了所有内容,但我不知道导致错误的原因。
答案 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异常:)