10-07 20:12:34.055 10098 10098 W dalvikvm threadid=1: thread exiting with uncaught exception (group=0x40c68930)
10-07 20:12:34.062 10098 10098 E AndroidRuntime FATAL EXCEPTION: main
10-07 20:12:34.062 10098 10098 E AndroidRuntime java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Darth377Apps.FrenchCommands/com.Darth377Apps.FrenchCommands.MainActivity}: java.lang.NullPointerException
10-07 20:12:34.062 10098 10098 E AndroidRuntime at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
10-07 20:12:34.062 10098 10098 E AndroidRuntime at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
10-07 20:12:34.062 10098 10098 E AndroidRuntime at android.app.ActivityThread.access$600(ActivityThread.java:141)
10-07 20:12:34.062 10098 10098 E AndroidRuntime at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
10-07 20:12:34.062 10098 10098 E AndroidRuntime at android.os.Handler.dispatchMessage(Handler.java:99)
10-07 20:12:34.062 10098 10098 E AndroidRuntime at android.os.Looper.loop(Looper.java:137)
10-07 20:12:34.062 10098 10098 E AndroidRuntime at android.app.ActivityThread.main(ActivityThread.java:5041)
10-07 20:12:34.062 10098 10098 E AndroidRuntime at java.lang.reflect.Method.invokeNative(Native Method)
10-07 20:12:34.062 10098 10098 E AndroidRuntime at java.lang.reflect.Method.invoke(Method.java:511)
10-07 20:12:34.062 10098 10098 E AndroidRuntime at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
10-07 20:12:34.062 10098 10098 E AndroidRuntime at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
10-07 20:12:34.062 10098 10098 E AndroidRuntime at dalvik.system.NativeStart.main(Native Method)
10-07 20:12:34.062 10098 10098 E AndroidRuntime Caused by: java.lang.NullPointerException
10-07 20:12:34.062 10098 10098 E AndroidRuntime at com.Darth377Apps.FrenchCommands.MainActivity.onCreate(MainActivity.java:28)
10-07 20:12:34.062 10098 10098 E AndroidRuntime at android.app.Activity.performCreate(Activity.java:5104)
10-07 20:12:34.062 10098 10098 E AndroidRuntime at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
10-07 20:12:34.062 10098 10098 E AndroidRuntime at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
10-07 20:12:34.062 10098 10098 E AndroidRuntime ... 11 more Catalog:
gob1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View p1)
{
//setContentView(R.layout.main);
}
});
gob2.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View p1)
{
//setContentView(R.layout.main);//change to play when finished
}
});
lb.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View p1)
{
//setContentView(R.layout.learn);
}
});
plb.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View p1)
{
//setContentView(R.layout.main);//change to play
}
});
prb.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View p1)
{
//setContentView(R.layout.main);//change to project
}
});I have identified an issue in the app I have been developing.
每次打开应用程序时,都会因运行时错误而崩溃。
我缩小了代码以找到导致崩溃的部分 请注意,它在使用和不使用setContentView行时崩溃。
答案 0 :(得分:0)
在onCreate()
方法中,请确保设置包含要将onClickListener附加到的按钮的正确布局文件。做类似的事情:
Button button1;
public void onCreate(Bundle savedInstanceState){
setContentView(R.layout.main);
gob1 = (Button)findViewById(R.id.gameoverButton1);
}
现在,您必须确保gameoverButton1
文件中包含main.xml
。 setContentView
的工作方式是将xml文件作为活动的布局加载。加载后,您只能在main.xml
中分配按钮/ textViews / editTexts,如果{x}文件中没有gameoverButton1
,那么Android将无法看到该按钮并且无法初始化gob1
,对gob1
的进一步调用将提供nullPointerException
,因为gob1
未正确初始化。您只能使用在setContentView
方法中加载的xml文件中的视图。您无法加载某个xml文件作为布局,然后决定创建按钮并从不同的xml文件中分配这些按钮ID。
为什么要根据点击的按钮调用setContentView
来设置布局?不建议多次致电setContentView
。在setContentView
方法中调用onCreate()
来设置布局。再次调用它以完全加载新布局将使您执行的任何button / textView / editText分配无效,因为当您更改布局时这些视图将不再存在。
您可以做的是为您拥有的每个新布局创建一个新活动,并执行以下操作:
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View p1)
{
Intent intent = new Intent(this, newActivity.java);
startActivity(intent);
finish();
}
});
不要求助于更改当前活动的布局。而是创建一个新活动并打开包含新布局的活动。