spinner.setAdapter()的NullPointerException

时间:2014-04-26 09:10:40

标签: java android spinner

我想创建一个微调器来显示列表m。但是,以下代码在NullPointerException处提供了spinner.setAdapter(spinner_adapter)。为什么会这样?

public class Request extends ListActivity {
    private static final String[] m={"A","B","O","AB","others"};   
    private TextView view;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SimpleAdapter adapter = new SimpleAdapter(this, getData(),
            R.layout.listitem, new String[] { "name", "quant" },
            new int[] {R.id.name, R.id.quant });
        setListAdapter(adapter);

        view = (TextView) findViewById(R.id.spinnerText);  
        Spinner spinner = (Spinner) findViewById(R.id.spinner01);  
        ArrayAdapter<String> spinner_adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,m);  
        spinner_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);  
        spinner.setAdapter(spinner_adapter);              
        spinner.setOnItemSelectedListener(new SpinnerSelectedListener());  
        spinner.setVisibility(View.VISIBLE);  
    }

    class SpinnerSelectedListener implements OnItemSelectedListener{              
        public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,  
            long arg3) {  
            view.setText(""+m[arg2]);  
        }  
        public void onNothingSelected(AdapterView<?> arg0) {       
        }  
    }
}

4 个答案:

答案 0 :(得分:3)

你的行

    Spinner spinner = (Spinner) findViewById(R.id.spinner01);

结束spinner为空,因为没有为您的活动分配内容视图。

因此,当尝试与您的微调器进行交互时,会抛出NPE。

在初始化视图之前,将setContentView(R.layout.your_layout_content);添加到onCreate方法。

答案 1 :(得分:0)

也许,您尝试使用布局中的IDs,而您却错过了致电setContentView。在super.onCreate(savedInstanceState);

下面调用它
setContentView(<YourLayout>);

答案 2 :(得分:0)

您正在onCreate中访问这些观点,即

 Spinner spinner = (Spinner) findViewById(R.id.spinner01); 

id存在于 R.java 文件中,因为你有适当的布局,但是为了访问它们会导致运行时导致 nullpointer 失败你的所有观点

您需要添加

setContentView(R.layout.main);

onCreate 内,其中main是您的布局,即 main.xml ,其中包含 spinner01

答案 3 :(得分:0)

由于您使用ListView默认布局,TextViewSpinner都将为空,因为没有R.id.spinnerTextR.id.spinner01

所以你应该实现你的自定义布局

setContentView(...);

在这个布局中应该有

ListView ,ID为@android:id/list

<ListView
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

Spinner ,ID为@+id/spinner01

<Spinner
    android:id="@+id/spinner01"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

TextView ,ID为@+id/spinnerText

<TextView
    android:id="@+id/spinnerText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />