在其成员函数中使用类的私有变量

时间:2014-08-12 06:09:16

标签: java android eclipse

当我使用如下的EditText字段时,我得到了您的应用已停止的错误,控制台错误“频道无法恢复并将被处理”

public class SignupActivity extends ActionBarActivity {
    EditText name = (EditText) findViewById(R.id.name);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_signup);
        Intent resign = getIntent();
    }

    public void signUp() {
        String tname = name.getText().toString();
    }
}

当我将课程更改为

时,它工作正常
public class SignupActivity extends ActionBarActivity { 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_signup);
        Intent resign = getIntent();
    }

    public void signUp() {
        EditText name = (EditText)findViewById(R.id.name);
        String tname = name.getText().toString();
    }
}

当我使用上述代码时为什么它不起作用,请帮助,谢谢提前

5 个答案:

答案 0 :(得分:1)

您的密码:

EditText name = (EditText) findViewById(R.id.name);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_signup);
        Intent resign = getIntent();
    }  

你应该做什么:

public class SignupActivity extends ActionBarActivity {
    EditText name;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_signup);

        name = (EditText)findViewById(R.id.name);

        Intent resign = getIntent();
    }
}

答案 1 :(得分:1)

您需要了解一件事,在您调用OnCreate之前,您在与您的活动相关联的XML文件中声明的小部件无法使用

"setContentView(R.layout.activity_signup)" , you are trying to make it as member variable which will try to get them initialize even before onCreate is called, and hence the error.

答案 2 :(得分:1)

您在findViewById()之前过早地致电onCreate()。它会NPE,因为还没有找到Window的视图。

通常,您不应在onCreate()之前调用任何活动方法。

findViewById()的正确位置为onCreate()或更晚,以便有WindowsetContentView()之后可以找到实际可以找到的内容。

答案 3 :(得分:1)

这里是在调用setContentView(R.layout.activity_signup);之前初始化编辑文本 方法

答案 4 :(得分:1)

移动此

  EditText name = (EditText)findViewById(R.id.name);

 setContentView(R.layout.activity_signup);