Android:微调器上的getSelectedItem问题

时间:2015-04-30 07:49:17

标签: java android nullpointerexception spinner getselection

我有一个Spinner,并将所选项目放在邮件正文中。 这是我的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_modulo);

    Spinner spinnerTaglia = (Spinner) findViewById(R.id.spinnerTaglia);

// Create an ArrayAdapter using the string array and a default spinner layout ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,     R.array.Taglie, android.R.layout.simple_spinner_item);

// Specify the layout to use when the list of choices appears adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinnerTaglia.setPrompt("Seleziona la taglia!");

// Apply the adapter to the spinner
    spinnerTaglia.setAdapter(new NothingSelectedSpinnerAdapter(
            adapter,
            R.layout.contact_spinner_row_nothing_selected,
            // R.layout.contact_spinner_nothing_selected_dropdown, // Optional
            this));

    final String taglia = spinnerTaglia.getSelectedItem().toString();


    Button btnCompilaOrdine = (Button) findViewById(R.id.btnCompilaOrdine);
    btnCompilaOrdine.setOnClickListener(new View.OnClickListener(){

        public void onClick(View arg0) {

    Intent i = new Intent(Intent.ACTION_SEND);
    i.setType("message/rfc822");
    i.putExtra(Intent.EXTRA_EMAIL  , new String[]{"MAIL@gmail.com"});
    i.putExtra(Intent.EXTRA_SUBJECT, "MAIL OBJECT");
    i.putExtra(Intent.EXTRA_TEXT   , "Taglia: "+taglia);
    try {
        startActivity(Intent.createChooser(i, "Send mail..."));
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(Modulo.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
    }

    }
    });
}

应用程序在模拟器中正确启动,调试器没有显示任何内容(我正在使用Android Studio)但是当我点击按钮时,我会参与此活动,应用程序崩溃,Android Studio的调试器显示{{{ 1}}在行中:

final String taglia = spinnerTaglia.getSelectedItem()。toString();

我该如何解决这个问题?

6 个答案:

答案 0 :(得分:3)

如果您的微调器上没有选择任何内容并且调用getSelectedItem()使您的应用程序崩溃,则

toString()将返回null。摆脱

final String taglia = spinnerTaglia.getSelectedItem().toString();

并在你的onClick上执行:

if (spinnerTaglia.getSelectedItem() == null) {
      return;
}
String taglia = spinnerTaglia.getSelectedItem().toString();
// the other code

答案 1 :(得分:1)

移动线

final String taglia = spinnerTaglia.getSelectedItem().toString();

OnClickListener

目前,您在尝试选择任何内容之前尝试阅读所选项目。您还应确保getSelectedItem()不返回null,因为除非您启用/禁用btnCompilaOrdine按钮(选择项目时),否则用户可以按下按钮而不选择项目旋转器。

答案 2 :(得分:0)

也许你应该OnItemSelectedListener一个按钮的inseatead。 Android Spinner

答案 3 :(得分:0)

似乎项目返回时WorkingSpreadOrderCollevtionView = new CollectionViewSource { Source = SpreadOrderCollection }.View; 值为NULL

Invoking the method from a null objectNullPointerException因此,Javac编译器不会强制您使用try-catch块来适当地处理它。

希望这可以帮助您解决问题。

如需进一步参考,请访问以下链接: - RuntimeException

答案 4 :(得分:0)

您正在实际渲染微调器之前获取所选项目。这取决于设备到设备的呈现速度有多快。 而不是在getSelectionItem()方法的onCreate()中获取所选项目,请尝试在onClickListener()的{​​{1}}中执行此操作。

Button

答案 5 :(得分:0)

mSpinner.setSelected(true);

如果您使用spinner实施此功能,则不会提供 null