2012-05-04 48 views
0

我在我的ListActivity中使用微調框,並在setAdapter方法中獲得NullPointerException。我試圖研究谷歌和stackoverflow的類似問題,並嘗試他們的建議,但沒有用。但是,這段代碼在我的另一個應用程序中有效。NullPointerException - 使用微調框

options = getResources().getStringArray(R.array.options_array); 
Spinner s1 = (Spinner) findViewById(R.id.spinner1); 

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
    android.R.layout.simple_spinner_dropdown_item, options); 

s1.setAdapter(adapter); // Here is the error 
s1.setOnItemSelectedListener(new OnItemSelectedListener() 
    { 
     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) 
     { 
      int index = arg0.getSelectedItemPosition(); 
      Toast.makeText(getBaseContext(), 
       "You have selected item : " + options[index], 
       Toast.LENGTH_SHORT).show();     
     } 

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

我的微調XML

<Spinner  
     android:id="@+id/spinner1"  
     android:layout_width="25dip" 
     android:layout_height="25dip" 
      android:entries="@array/options_array" 
     android:prompt="@string/spin_prompt" 
     android:background="@drawable/expander_ic_maximized" 
     android:layout_alignParentRight="true" 
      android:layout_below="@id/name_text"   
     /> 

logcat的

05-04 09:23:48.492: ERROR/AndroidRuntime(343): Caused by: java.lang.NullPointerException 

05-04 09:23:48.492: ERROR/AndroidRuntime(343):  at com.amannain.android.missedcalls.MissedCallsSpinActivity.runSpinner(MissedCallsSpinActivity.java:31) 

05-04 09:23:48.492: ERROR/AndroidRuntime(343):  at com.amannain.android.missedcalls.MissedCallsSpinActivity.onCreate(MissedCallsSpinActivity.java:21) 

回答

0

您是否在您定義您的微調器的活動中設置了以下內容 setContentView(R.layout.main);
這個main.xml中應該有ID爲「spinner1」

+0

嘗試打印s1。你會知道什麼是投擲null ..無論是微調還是選項 – sush

+0

謝謝Sush。你指出我正確的方向。在我的情況下,微調框在另一個xml中定義,而不是在我當前使用的setContentView(R.layout.main)中。那就是爲什麼NullPointerException。我正在使用CursorAdapter填充ListView,現在我將微調代碼移到了那裏。 – Harry

0

這些一些修改可能會幫助你..

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
android.R.layout.simple_spinner_dropdown_item, options); 

Here instead of ArrayAdapter you can use SpinnerAdapter, Please modify your code and let me know. 
0

我覺得值的選項(這是通過ArrayAdapter)是空的。嘗試在log-cat中查看「選項」的值。

+0

不應該是因爲選項值從strings.xml填充,並且這個相同的代碼在我的另一個應用程序中工作。 – Harry

2
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
android.R.layout.simple_spinner_dropdown_item, **options**); 

因爲你的期權價值是null,你會得到一個NullPointerException定義您的微調組件。檢查options值。

+0

我已經嘗試了兩種方法。從XML加載數組值並通過代碼填充它。都出錯了。 options = getResources()。getStringArray(R.array.options_array); \t \t options = new String [] {「Default」,「Cambodian」,「Chinese」,「Korean」}; – Harry