2012-03-06 16 views
-1

私の活動の1つでは、スピナーを使用しています。私はその次のように定義... SpinnerCountryクラスオブジェクトの配列を移入:スクロールがリストの最後に到達するとAndroid Spinnerがクラッシュする

class SpinnerCounry { 
    public SpinnerCounry(String spinnerText, String value) { 
     this.spinnerText = spinnerText; 
     this.value = value; 
    } 

    public String getSpinnerText() { 
     return spinnerText; 
    } 

    public String getValue() { 
     return value; 
    } 

    public String toString() { 
     return spinnerText; 
    } 

    String spinnerText; 
    String value; 
} 

私は以下である機能でスピナーを結合しています:

private void setCountriesSpinner() { 

    //create array of countries! 
    final SpinnerCounry items[] = new SpinnerCounry[233]; 
    items[0] = new SpinnerCounry("Abkhazia", "207"); 
    items[1] = new SpinnerCounry("Afghanistan", "1"); 
    items[2] = new SpinnerCounry("Albania", "103"); 
    items[3] = new SpinnerCounry("Algeria", "2"); 
       .... 
       .... 
       .... 
    items[230] = new SpinnerCounry("Zambia", "154"); 
    items[231] = new SpinnerCounry("Zimbabwe", "155"); 

    ArrayAdapter<SpinnerCounry> adapter = new ArrayAdapter<SpinnerCounry>(this, android.R.layout.simple_spinner_item, items); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

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

    s.setAdapter(adapter);  

    s.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     public void onItemSelected(AdapterView<?> parent, View view, 
       int position, long id) { 

      //get the selected country's id to use later 
      _countryId = items[position].getValue(); 

     } 

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

これは動作しますよく...スピナーの国を読み込みます。&は、クリック/タップすると正しい国IDを選択します。

しかし、Spinnerを最後の国にスクロールすると、アプリケーションがクラッシュします。

03-06 19:39:04.004: E/AndroidRuntime(1179): FATAL EXCEPTION: main 
03-06 19:39:04.004: E/AndroidRuntime(1179): java.lang.NullPointerException 
03-06 19:39:04.004: E/AndroidRuntime(1179):  at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:398) 
03-06 19:39:04.004: E/AndroidRuntime(1179):  at android.widget.ArrayAdapter.getDropDownView(ArrayAdapter.java:419) 
03-06 19:39:04.004: E/AndroidRuntime(1179):  at android.widget.Spinner$DropDownAdapter.getDropDownView(Spinner.java:543) 
03-06 19:39:04.004: E/AndroidRuntime(1179):  at android.widget.Spinner$DropDownAdapter.getView(Spinner.java:539) 
03-06 19:39:04.004: E/AndroidRuntime(1179):  at android.widget.AbsListView.obtainView(AbsListView.java:1949) 
03-06 19:39:04.004: E/AndroidRuntime(1179):  at android.widget.ListPopupWindow$DropDownListView.obtainView(ListPopupWindow.java:1156) 
03-06 19:39:04.004: E/AndroidRuntime(1179):  at android.widget.ListView.makeAndAddView(ListView.java:1756) 
03-06 19:39:04.004: E/AndroidRuntime(1179):  at android.widget.ListView.fillDown(ListView.java:656) 
03-06 19:39:04.004: E/AndroidRuntime(1179):  at android.widget.ListView.fillGap(ListView.java:620) 
03-06 19:39:04.004: E/AndroidRuntime(1179):  at android.widget.AbsListView.trackMotionScroll(AbsListView.java:4408) 
03-06 19:39:04.004: E/AndroidRuntime(1179):  at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:3687) 
03-06 19:39:04.004: E/AndroidRuntime(1179):  at android.os.Handler.handleCallback(Handler.java:587) 
03-06 19:39:04.004: E/AndroidRuntime(1179):  at android.os.Handler.dispatchMessage(Handler.java:92) 
03-06 19:39:04.004: E/AndroidRuntime(1179):  at android.os.Looper.loop(Looper.java:132) 
03-06 19:39:04.004: E/AndroidRuntime(1179):  at android.app.ActivityThread.main(ActivityThread.java:4025) 
03-06 19:39:04.004: E/AndroidRuntime(1179):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-06 19:39:04.004: E/AndroidRuntime(1179):  at java.lang.reflect.Method.invoke(Method.java:491) 
03-06 19:39:04.004: E/AndroidRuntime(1179):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
03-06 19:39:04.004: E/AndroidRuntime(1179):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
03-06 19:39:04.004: E/AndroidRuntime(1179):  at dalvik.system.NativeStart.main(Native Method) 

すべてのヘルプは大歓迎です。私は次のように

LogCatがある... LogCatに見えたが、いただきました!間違って取得できませんでした。ありがとう

答えて

2

あなたの配列には233のエントリが含まれています。しかし、最後の入力[232]は空であり、すなわちnullである。それがあなたのアプリケーションをクラッシュさせるものです。

現在の固定配列の代わりにArrayListを使用することをお勧めします。

+0

私の愚かな間違いを指摘してくれてありがとう...本当に問題でした – Aamir

0

233個の要素の配列を作成しましたが、それらの要素は232個だけ挿入しました。

インデックス232で要素にアクセスしようとすると、nullポインタ例外が発生する可能性があります。

+0

あなたは単純に 'null'を取得するので、それはこの要素にアクセスしていません。問題は、 'ArrayAdapter'が' null'を処理できず、NullPointerExceptionをスローすることです。 –