每个人,我是android开发的新手。现在我有一个自己无法解决的问题。下面的代码有什么问题(特别是代码中标记的行)?
MainActivity.java:
package com.amaker.ch02.app;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
private TextView displayTextView = (TextView)findViewById(R.id.DisplayTextView); <--Possibly this line
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
displayTextView.setText("change in the code");
}
}
运行,我在AVD中收到一条消息: 应用程序意外停止。请再试一次。 但是如果我在声明后没有立即分配displayTextView,我会按如下方式更改代码,然后一切顺利。
package com.amaker.ch02.app;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
private TextView displayTextView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
displayTextView = (TextView)findViewById(R.id.DisplayTextView);
displayTextView.setText("change in the code");
}
}
为什么呢?这两个代码有什么不同吗?
答案 0 :(得分:10)
在您致电setContentView(R.layout.main)
之前,TextView不是活动视图层次结构的一部分。当您声明变量时:
private TextView displayTextView = (TextView)findViewById(R.id.DisplayTextView);
该视图尚不存在,因此displayTextView
设置为null
。然后,当您尝试在NullPointerException
中致电setText()
时,您会收到onCreate()
。
答案 1 :(得分:0)
由于文字视图未设置为您的活动内容而您正在尝试查找该文字视图,因此在您设置内容后调用setContentView()
时,文字视图仅会在您创建的活动中绑定对于您的活动,您可以从该内容中获取View
。
答案 2 :(得分:0)
试试这个。
public class MainActivity extends Activity
{
/** Called when the activity is first created. */
private TextView displayTextView;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
displayTextView = (TextView)findViewById(R.id.DisplayTextView);
displayTextView.setText("change in the code");
}
}