簡體   English   中英

在其成員函數中使用類的私有變量

[英]Use private variable of a class in its member function

當我如下所示使用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();
    }
}

當我使用上面的代碼時為什么不起作用,請幫忙,謝謝

您的代碼:

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();
    }
}

您需要了解一件事,在與OnActivity相關聯的XML文件中聲明的小部件在調用OnCreate之前不可用

"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.

您在onCreate()之前調用findViewById()太早。 它將進行NPE,因為還沒有Window可以在其中找到視圖。

通常,您不應該在onCreate()之前調用任何活動方法。

findViewById()正確位置是onCreate()或更高版本,以便有一個Window ,而在setContentView()之后則是可以實際找到的東西。

在這里,您在調用setContentView(R.layout.activity_signup);之前初始化Edit文本setContentView(R.layout.activity_signup); 方法

移動這個

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

 setContentView(R.layout.activity_signup);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM