我对android很新。 我正在尝试研究生命周期方法。 试图覆盖onStart方法,但让应用程序停止错误。 我可以发现它是由于NullPointerException但我无法确定它是由哪个变量。 请帮忙, 这是我的代码
public class MainActivity extends Activity {
TextView mStart;
int iStart=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mStart=(TextView)findViewById(R.id.sStart);
setContentView(R.layout.activity_main);
}
public void onStart()
{
super.onStart();
iStart++;
mStart.setText(iStart);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
这是日志,
03-08 07:08:05.216: E/AndroidRuntime(1604): FATAL EXCEPTION: main
03-08 07:08:05.216: E/AndroidRuntime(1604): Process: course.android.myfirstapp, PID: 1604
03-08 07:08:05.216: E/AndroidRuntime(1604): java.lang.RuntimeException: Unable to start activity ComponentInfo{course.android.myfirstapp/course.android.myfirstapp.MainActivity}: java.lang.NullPointerException
03-08 07:08:05.216: E/AndroidRuntime(1604): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2176)
03-08 07:08:05.216: E/AndroidRuntime(1604): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
03-08 07:08:05.216: E/AndroidRuntime(1604): at android.app.ActivityThread.access$700(ActivityThread.java:135)
03-08 07:08:05.216: E/AndroidRuntime(1604): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
03-08 07:08:05.216: E/AndroidRuntime(1604): at android.os.Handler.dispatchMessage(Handler.java:102)
03-08 07:08:05.216: E/AndroidRuntime(1604): at android.os.Looper.loop(Looper.java:137)
03-08 07:08:05.216: E/AndroidRuntime(1604): at android.app.ActivityThread.main(ActivityThread.java:4998)
03-08 07:08:05.216: E/AndroidRuntime(1604): at java.lang.reflect.Method.invokeNative(Native Method)
03-08 07:08:05.216: E/AndroidRuntime(1604): at java.lang.reflect.Method.invoke(Method.java:515)
03-08 07:08:05.216: E/AndroidRuntime(1604): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
03-08 07:08:05.216: E/AndroidRuntime(1604): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
03-08 07:08:05.216: E/AndroidRuntime(1604): at dalvik.system.NativeStart.main(Native Method)
03-08 07:08:05.216: E/AndroidRuntime(1604): Caused by: java.lang.NullPointerException
03-08 07:08:05.216: E/AndroidRuntime(1604): at course.android.myfirstapp.MainActivity.onStart(MainActivity.java:26)
03-08 07:08:05.216: E/AndroidRuntime(1604): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1171)
03-08 07:08:05.216: E/AndroidRuntime(1604): at android.app.Activity.performStart(Activity.java:5253)
03-08 07:08:05.216: E/AndroidRuntime(1604): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2149)
03-08 07:08:05.216: E/AndroidRuntime(1604): ... 11 more
答案 0 :(得分:1)
仅setContentView()
视图可用。另外,null
这些行的更改顺序
mStart=(TextView)findViewById(R.id.sStart);
setContentView(R.layout.activity_main);
到
setContentView(R.layout.activity_main);
mStart=(TextView)findViewById(R.id.sStart);
在这一行
mStart.setText(iStart);
此处iStart
被视为resource id
..所以它会抛出ResourceNotFoundException
..更改该行。
mStart.setText(""+iStart);
答案 1 :(得分:0)
在onCreate()
中,您在致电mStart
之前指定setContentView()
。因此mStart
将是null
。在使用findViewById
setContentView
答案 2 :(得分:0)
在调用之前找不到任何UI元素的ID
setContentView(R.layout.activity_main)
方法。所以从
改变mStart=(TextView)findViewById(R.id.sStart);
setContentView(R.layout.activity_main);
到
setContentView(R.layout.activity_main);
mStart=(TextView)findViewById(R.id.sStart);
您还必须从
更改此设置 mStart.setText(iStart);
到
mStart.setText(iStart+"");