Я просто тестирование ввода/вывода, не было никакого специального назначения, это последний код, который выполняется успешно:Почему Android-приложение вылетает для инициализации переменной с помощью findViewById (R.id. ******) в начале класса?
public class MainActivity extends AppCompatActivity
{
/*
EditText username = (EditText)findViewById(R.id.editText_Username);
EditText password = (EditText)findViewById(R.id.editText_Password);
TextView inputdata = (TextView)findViewById(R.id.textView_InputData);
TextView welcome = (TextView)findViewById(R.id.textView_Welcome);
Button login=(Button)findViewById(R.id.button_Login);
Button anotherLogin=(Button)findViewById(R.id.button_Login_Another);
public void doLoginOnClick(View v)
{
String s1=username.getText().toString();
inputdata.setText(s1);
}
*/
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton)findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
}
Я пытаюсь захватить идентификатор компонента с использованием
findViewById(R.id.***)
как вы можете видеть, я помещаю этот код в комментарий в самом начале кода.
EditText username = (EditText)findViewById(R.id.editText_Username);
EditText password = (EditText)findViewById(R.id.editText_Password);
TextView inputdata = (TextView)findViewById(R.id.textView_InputData);
TextView welcome = (TextView)findViewById(R.id.textView_Welcome);
Button login=(Button)findViewById(R.id.button_Login);
Button anotherLogin=(Button)findViewById(R.id.button_Login_Another);
Если удалить комментарий выше и запустить его (как в эмуляторе и реальном устройстве), программа падает сразу, я удивлен, что здесь не так?
Даже я попытался инициализировать то же самое, используя конструктор.
Но если я положил его внутри onCreate()
, то нет аварии? Зачем?
Я пытался извлечь информацию из имени пользователя и пароля и отображать его на TextView в textView_Inputdata
используя
EditText username = (EditText)findViewById(R.id.editText_Username);
EditText password = (EditText)findViewById(R.id.editText_Password);
TextView inputdata = (TextView)findViewById(R.id.textView_InputData);
inputdata.setText(username.getText.toString()+" "+password.getText.toString());
Есть ли лучше или более простой способ сделать это?
Без какой-либо stacktrace я ставлю его nullPointerException, вызванное findViewById, возвращающим значение null, вызванное отсутствием макета. Вызовите его после setContentView(). – Nanoc