这是错的吗?TextView displayTextView =(TextView)findViewById(R.id.DisplayTextView);

Sea*_*ene 3 android textview assign

大家好,我是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"); 
    }
}
Run Code Online (Sandbox Code Playgroud)

运行,我在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"); 
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么?这两个代码有什么不同吗?

Ted*_*opp 10

在您调用之前,TextView不是活动视图层次结构的一部分setContentView(R.layout.main).当您声明变量时,如下所示:

private TextView displayTextView = (TextView)findViewById(R.id.DisplayTextView);
Run Code Online (Sandbox Code Playgroud)

该视图尚不存在,因此displayTextView设置为null.然后你得到一个NullPointerException当您尝试调用setText()在onCreate().