当调出onCreate方法时,Android setText会崩溃应用程序

时间:2014-01-20 08:54:35

标签: android oncreate

在我的应用中尝试使用setText更改TextView文本。 如果在onCreate方法中进行调用它可以正常工作但是如果我调用另一个方法这样做它会崩溃给我一个NullPointerException

这是工作代码

package staub.olivier.aros.test;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;


public class MainActivity extends Activity {

    public TextView ca00;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    final TextView ca00 = (TextView) findViewById(R.id.case00); 
    ca00.setText("stuff");
}

我想要做的是有一个方法,只要我调用它就会改变我的文本,所以我尝试了这个:

package staub.olivier.aros.test;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;


public class MainActivity extends Activity {

    public TextView ca00;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    final TextView ca00 = (TextView) findViewById(R.id.case00); 
    updateText();
}

    public updateText() {
            ca00.setText("stuff");

    }
    }

我做错了什么或如何设法做我想做的事?

感谢您的时间和答案!

5 个答案:

答案 0 :(得分:3)

您的问题是可变范围。在onCreate()方法中,您实际上是在定义一个新的局部变量而不是使用类属性。

您需要在onCreate()

中更改此行
final TextView ca00 = (TextView) findViewById(R.id.case00);

对此:

ca00 = (TextView) findViewById(R.id.case00);

这将解决您的NPE。

答案 1 :(得分:1)

package staub.olivier.aros.test;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;


public class MainActivity extends Activity {

    public TextView ca00;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

     ca00 = (TextView) findViewById(R.id.case00); 
    updateText();
}

    public updateText() {
            ca00.setText("stuff");

    }
    }

答案 2 :(得分:1)

您在代码中创建了两次TextView ca00,而不是全局声明它并直接在onCreate()中使用它

package staub.olivier.aros.test;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;


public class MainActivity extends Activity {

    public TextView ca00;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    ca00 = (TextView) findViewById(R.id.case00);    // Change here
    updateText();
}

    public updateText() {
            ca00.setText("stuff");

    }
    }

答案 3 :(得分:0)

您的全局ca00永远不会被初始化,因此您遇到空指针异常

答案 4 :(得分:0)

这是关于代码范围的问题。在onCreate方法中,您声明了ca00变量:

final TextView ca00 = (TextView) findViewById(R.id.case00); 

因此,您设置为ca00的任何内容只会影响该方法中的变量,而不会影响类范围中的变量。你应该改为:

this.ca00 = (TextView) findViewById(R.id.case00);  
// this keyword is not mandatory, but I recommend it.