Сбой приложения при вызове значения Spinner в расчете? - PullRequest
0 голосов
/ 26 января 2010
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 Ответ

2 голосов
/ 26 января 2010

Вы объявляете aperture дважды, один раз в начале кода и снова в методе onCreate.

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

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

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

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

...