Приложение вылетает при вызове значения Spinner в расчете?

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;
import android.widget.TextView;

public class calctest extends Activity {
/** Called when the activity is first created. */
private EditText input; 
private EditText input2; 
private EditText input3; 
private EditText input4;
private TextView output;
private TextView output2;
private Spinner aperture;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

 // Extract the text fields from the XML layout 
    input = (EditText) findViewById(R.id.input1); 
    input2 = (EditText) findViewById(R.id.input2);
    input3 = (EditText) findViewById(R.id.input3); 
    input4 = (EditText) findViewById(R.id.input4);
    output = (TextView) findViewById(R.id.result); 
    output2 = (TextView) findViewById(R.id.result2);

    //aperture dropdown
    final Spinner aperture = (Spinner) findViewById(R.id.apt);
    ArrayAdapter adapter = ArrayAdapter.createFromResource(
    this, R.array.apertures, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    aperture.setAdapter(adapter);

    Spinner mode = (Spinner) findViewById(R.id.mode);
    ArrayAdapter adapter2 = ArrayAdapter.createFromResource(
    this, R.array.formats, android.R.layout.simple_spinner_item);
    adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    mode.setAdapter(adapter2);

    // Perform calculation when button is pushed

    final Button button = (Button) findViewById(R.id.calculate);
    button.setOnClickListener(new View.OnClickListener() {             
        public void onClick(View v) {                 
            doCalculation(aperture.getSelectedItem());
                }         
            });
        }


private void doCalculation(Object selectedItem) { 
    // Get entered input value 
    String cinput1 = input.getText().toString(); 
    String cinput2 = input2.getText().toString();
    String cinput3 = input3.getText().toString(); 
    String cinput4 = input4.getText().toString();
    Object cinput5 = aperture.getSelectedItem();
}

}

Я знаю, что метод doCalculation на самом деле еще ничего не вычисляет, потому что приложение вылетает просто из-за попытки получить значение ввода. Если я отключу строку cinput5, она будет работать нормально. Что я здесь не так делаю? И на этой ноте, как мне преобразовать значение счетчика в строку для использования в расчете?

Кроме того, в качестве двойной проверки... счетчик отображает список чисел (1.4, 2, 2.8, 4, 5.6 и т. Д.), И любое выбранное число является числом, которое мне нужно использовать в расчете. Я звоню правильное значение от счетчика, верно?

Я прошу прощения за, вероятно, чрезвычайно очевидные ошибки. Я только начал Java, и после того, как я закончу это приложение, я обещаю, что получу книгу!

1 ответ

Решение

Вы декларируете aperture дважды, один раз в начале вашего кода и снова внутри onCreate метод.

В этой строке:

final Spinner aperture = (Spinner) findViewById(R.id.apt);

попробуйте удалить final Spinner,

Когда приложение достигает последней строки метода doCalculation, оно, скорее всего, выбрасывает нулевую ссылку на объект, поскольку оно ссылается на экземпляр частной апертуры, который еще не создан.

Другие вопросы по тегам