Android TextView.setText强制关闭

时间:2010-09-13 04:49:12

标签: android textview

我正在尝试Google University Android lab1根据从其他活动通过Intent传递的值,要求您更改TextView的文本内容。

我尝试了其余的代码,但...... 当我添加“tv.settext(...)行”时,为什么我的应用程序强制关闭?

public class HelloWorld extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        /*
         * Fetch and display passed string.
         */
        TextView tv = (TextView) findViewById(R.id.HelloTV);
        Bundle extras = this.getIntent().getExtras();
        if (extras != null) {
            String nameStr = extras.get("Username").toString();
            if (nameStr != null) {
                tv.setText("Hello "+nameStr);         
            }
        }
        setContentView(R.layout.main);
    }
}

2 个答案:

答案 0 :(得分:10)

查看错误日志,甚至更好,查看调试会话 - 可以看到第22行有一个空指针异常:

           tv.setText("Hello "+nameStr);         

这是因为tv == null。它应该由行初始化:

    TextView tv = (TextView) findViewById(R.id.HelloTV);

但要在布局中使用id,您必须始终在当前活动中注册视图。该行应该在onCreate方法的早期包含:

    setContentView(R.layout.main);

这是工作的Helloworld课程:

public class HelloWorld extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        /*
         * Fetch and display passed string.
         */
        TextView tv = (TextView) findViewById(R.id.HelloTV);
        Bundle extras = this.getIntent().getExtras();
        if (extras != null) {
            String nameStr;
            if (extras.get("Username") != null) {
                nameStr = extras.get("Username").toString();
                tv.setText("Hello "+nameStr);           
            }
        }
    }
}

此Helloworld类正确地从活动开始时发送的附加内容中检索用户名,并显示个性化问候语。

我感谢康斯坦丁·布罗夫和上一个问题here

,我找到了答案

答案 1 :(得分:0)

项目布局文件夹中只有一个.xml文件吗?如果你有一个主活动的xml文件和一个由更新的eclipse提供的fragment.xml文件,你需要在自动生成的“onCreateView”函数中执行setText。这是组合片段(包含视图元素)和主要布局的地方。 所以在代码中找到下面的行或创建它:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {  ...   }

然后在此函数中设置视图的文本或其他必需元素(例如btn,textView ...)。如:

        public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container,
                false);

                    //set the text of textView
        TextView txvMain = (TextView) rootView.findViewById(R.id.txvMain);
        txvMain.setText("SetText works now");

                    //set a drawable as the background of the textView
        txvMain.setBackgroundResource(drawable.ic_launcher);

        return rootView;
    }

我期待任何进一步的问题。问候