2011-06-21 20 views
-1

下面的代碼拋出一個NullPointerException異常的Android onItemSelected - 空指針

public class test extends Activity implements OnItemSelectedListener { 
    private TextView explanation; 

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

     explanation = (TextView) findViewById(R.id.picker_explanation_text); 

     Spinner spinner = (Spinner) findViewById(R.id.spinner); 
     ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
       this, R.array.picker_array, 
       android.R.layout.simple_spinner_item); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setOnItemSelectedListener(new test()); 
     spinner.setAdapter(adapter); 
    } 

    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int pos, 
      long id) { 
     explanation = (TextView) findViewById(R.id.picker_explanation_text); 
    } 
} 

這是因爲在onItemSelected(...)方法explanation = (TextView) findViewById(R.id.picker_explanation_text);拋出,但我不知道爲什麼。畢竟,它是在onCreate(...)方法中工作的。

+0

您提到的實際行不太可能引發NPE;當解釋被其他地方引用時,返回null和NPE的實際問題是什麼? – antlersoft

+0

刪除此行時不會引發NPE。一旦我再次放入,NPE再次被拋出。其他的東西也很奇怪:「解釋」應該在onCreate方法中「填充」,但是在onItemSelected方法中它仍然是null。 – deimos1988

回答

1

而不是

spinner.setOnItemSelectedListener(new test()); 

使用

spinner.setOnItemSelectedListener(this); 

你想用你的實際活動爲目標;你正在創建一個永遠不會用上下文初始化的新對象,所以當它被調用時會崩潰。

+0

非常感謝,解決了我的問題。我從教程中複製了這些內容,並沒有多少考慮。但它非常有意義,現在它正在按照它應該的方式工作! – deimos1988