我试图显示供用户选择的Spinner列表,然后将选择内容绑定到另一个array。用户选择的值surfaceCode将保存以备后用。 Spinner数组R.array.surface_option和要绑定R.array.surface_code的数组对齐并保存在xml中。

这是我的代码...

spinnerSurface = (Spinner) findViewById(R.id.spinnerSurface);
ArrayAdapter<CharSequence> adapterSurface = ArrayAdapter.createFromResource(this, R.array.surface_option, android.R.layout.simple_spinner_item);
adapterSurface.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerSurface.setAdapter(adapterSurface);

spinnerSurface.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
        TextView tx = (TextView)v;
        Log.i("\n\nid",String.valueOf(tx.getText()));
        String surfaceCode = getResources().getStringArray(R.array.surface_code)[spinnerSurface.getSelectedItemPosition()];
    }

    public void onNothingSelected(AdapterView<?> arg0) {
    }
});

Log.d("code outside", surfaceCode.trim() + " is equal to SW: " + surfaceCode.trim().equals("SW"));


surfaceCode出现错误process stopped unexpectedly,可能是因为它返回了null。我的代码有什么问题?

最佳答案

在最后一个代码行中,surfaceCode可以为null,因为仅在进行选择时才执行匿名侦听器中的代码。

这将在最后一行中引发NullPointerException。

即使onItemSelected()被调用,它也不会设置成员surfaceCode,因为您已经声明了与它相同名称的局部变量。

您应该在surfaceCode之前删除“ String”,并将log语句放在onItemSelected()中。

07-26 07:28