初始化变量的NullPointerException?

时间:2014-10-04 20:04:48

标签: java android button textview

我有TextView [?]的问题,我初始化了textview,因为我想让它可滚动但是我有一个错误。

public void onCreate(Bundle savedInstanceState)
{
     super.onCreate(savedInstanceState);
     dc = new DigitalClock(this);
     textViewMesssage = new TextView(this);
     dc = (DigitalClock) findViewById(R.id.digitalClock1);
     textViewMesssage = (TextView) findViewById(R.id.textV);
     textViewMesssage.setMovementMethod(new ScrollingMovementMethod());
     setContentView(R.layout.main);
     addListenerOnButton();

}
public void addListenerOnButton() {
    buttonTest = (Button) findViewById(R.id.button_id);
    buttonTest.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
                                  Calendar c = Calendar.getInstance();
                                  SimpleDateFormat sdf = new SimpleDateFormat("dd:MMMM:yyyy HH:mm:ss a");
                                  String strDate = sdf.format(c.getTime());
        }

    });
}

main.xml中

<TextView  
    android:id="@+id/textV"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:text="MainActivity"
    android:layout_gravity="left"
    android:scrollbars = "vertical"
    />
<Button
    android:id="@+id/button_id"  
    android:layout_width="100dp" 
    android:layout_height="wrap_content" 
    android:text="Hello"
    android:layout_gravity="right"

    />

和错误

  

20:36:04.407 18740 XXX.X错误AndroidRuntime引起:java.lang.NullPointerException   20:36:04.407 18740 XXX.X ERROR AndroidRuntime at XXX.X.MainActivity.onCreate(MainActivity.java:40)   40行是textViewMesssage.setMovementMethod(new ScrollingMovementMethod());

我正在使用API​​ lvl 8

4 个答案:

答案 0 :(得分:6)

在尝试从布局XML获取任何视图之前,必须先调用

setContentView(R.layout.main);

答案 1 :(得分:2)

放:

setContentView(R.layout.main);

在onCreate的顶部,这段代码也毫无意义:

 dc = new DigitalClock(this);
 textViewMesssage = new TextView(this);
 dc = (DigitalClock) findViewById(R.id.digitalClock1); //<< overwrites dc, and is not present in layout

答案 2 :(得分:1)

使用

创建新的文本视图
textViewMesssage = new TextView(this);

然后立即将其扔掉

textViewMesssage = (TextView) findViewById(R.id.textV);

可能会返回null。在这种情况下,它确实是因为在您的代码中此时尚未调用setContentView();。请记住,在致电setContentView();之前,您必须致电findViewById()。因此,我建议将setContentView()写为每个onCreate()方法的第二行(在super.onCreate()之后)。

答案 3 :(得分:0)

为什么你需要这两行,删除它们检查它是否有效

 dc = new DigitalClock(this);
 textViewMesssage = new TextView(this);

并添加

setContentView(R.layout.main);