1

我正在尝试显示一个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。我的代码有什么问题?

4

1 回答 1

1

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

这将导致最后一行出现 NullPointerException。

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

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

于 2012-06-18T12:05:46.557 回答