Я начинаю разработку приложений. Моя проблема в том, что когда я запускаю свое приложение, и я нажимаю кнопку "Вычислить", программа останавливается. Код:
public class screen1 extends Activity {
private EditText name;
private CheckBox box1;
private Spinner spinner;
private TextView text1, text2, text3, text4, text5, text6;
private Button calcbutton, closebutton;
String strength;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Spinner hubSpinner = (Spinner) findViewById(R.id.myspinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.military_ranks , android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
hubSpinner.setAdapter(adapter);
name = (EditText)findViewById(R.id.editText1);
strength = name.getText().toString();
box1 = (CheckBox)findViewById(R.id.checkBox1);
text1 = (TextView)findViewById(R.id.textView4);
text2 = (TextView)findViewById(R.id.textView6);
text3 = (TextView)findViewById(R.id.textView8);
text4 = (TextView)findViewById(R.id.textView10);
text5 = (TextView)findViewById(R.id.textView12);
text6 = (TextView)findViewById(R.id.textView14);
final Button calcbutton = (Button) findViewById(R.id.button1);
calcbutton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int str = Integer.valueOf(strength);
int rank = spinner.getSelectedItemPosition()+1;
double sebzes;
if(box1.isChecked()){
sebzes = (((rank-1)/20+0.3)*((str/10)+40))*1*(1+1/100);
text1.setText(Double.toString(sebzes));
}
else{
sebzes = (((rank-1)/20+0.3)*((str/10)+40))*1;
text1.setText(Double.toString(sebzes));
}
}
});
final Button closebutton = (Button) findViewById(R.id.button2);
closebutton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
finish();
}
});
}
}
В компоненте edittext
вы можете писать только цифры. Я не знаю, почему он не работает.
Проблема заключается в следующих двух строках:
int str = Integer.valueOf(strength);
int rank = spinner.getSelectedItemPosition()+1;
Первый не будет терпеть неудачу, если вы используете только номера в вашем EditText, но было бы лучше убедиться в том, что или, по крайней мере, поймать исключение, которое бросается, когда вы пытаетесь преобразовать символ в числовое значение. Кроме того, вы также можете использовать Integer.valueOf(strength).intValue();
, даже если это обычно не требуется.
Реальная проблема - вторая строка. Вы указали переменную spinner
, но вы ее не создаете. Вот почему вы получите здесь NullPointerException.
В несвязанной заметке: вы также должны начать свое имя класса с большой буквы, чтобы следовать соглашениям об именах Java.
Вы не создаете экземпляр spinner
в любом месте, но ссылаетесь на него во второй строке метода нажатия кнопки. Вероятно, пустая ссылочная проблема.