2016-12-28 12 views
0

私はスピナーを使用してカレンダークラスの日付を表示します。カレンダーを使用しているときにスピナー値を取得するには

私は年と月を得ることができますが、私はspinnerに日の値を得ることができません。

それは

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference 

はどのように問題を解決することができます示して?スピナーアダプターadapterSpDay.notifyDataSetChanged();

private void datePick(){ 
     Calendar calendar = Calendar.getInstance(); 

     for (int i = 0; i < 100; i++) { 
      dataYear.add("" + (calendar.get(Calendar.YEAR) - i)); 
     } 

     adapterSpYear = new ArrayAdapter<String>(getActivity(), R.layout.spinner, dataYear); 
     adapterSpYear.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item); 
     spYear.setAdapter(adapterSpYear); 
     spYear.setSelection(34);//for 1982 

     for (int i = 1; i <= 12; i++) { 
      dataMonth.add("" + (i < 10 ? "0" + i : i)); 
     } 

     adapterSpMonth = new ArrayAdapter<String>(getActivity(), R.layout.spinner, dataMonth); 
     adapterSpMonth.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item); 
     spMonth.setAdapter(adapterSpMonth); 


     adapterSpDay = new ArrayAdapter<String>(getActivity(), R.layout.spinner, dataDay); 
     adapterSpDay.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spDay.setAdapter(adapterSpDay); 

     spMonth.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> adapterView, View view, int arg2, long arg3) { 
       dataDay.clear(); 
       Calendar calendar1 = Calendar.getInstance(); 
       calendar1.set(Calendar.YEAR, Integer.valueOf(spYear.getSelectedItem().toString())); 
       calendar1.set(Calendar.MONTH, arg2); 
       int dayOfMonth = calendar1.getActualMaximum(Calendar.DAY_OF_MONTH); 
       for (int i = 1; i <= dayOfMonth; i++) { 
        dataDay.add("" + (i < 10 ? "0" + i : i)); 
       } 
       adapterSpDay.notifyDataSetChanged(); 


       String year=spYear.getSelectedItem().toString(); 
       String month=spMonth.getSelectedItem().toString(); 
       String day=spDay.getSelectedItem().toString(); 

       Log.i("test",".>>>>Year>>>>"+year); 
       Log.i("test",".>>>>Month>>>>"+month); 
       Log.i("test",".>>>>Day>>>>"+day); 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> adapterView) { 

      } 
     }); 
    } 

enter image description here enter image description here

+0

の内側に再び日のアダプターとセットアダプタを作成する必要があります配列 – Beyka

+1

spDay.getSelectedItem()の値を確認してください。任意の日を選択しないのでnullです。年と月のみを選択します。 –

+0

コードを設定すると、String day = spDay.getSelectedItem()。toString(); すぐにクラッシュするアプリを起動します。 私はSangeetからの解決策を得ました。あなたの助けを借りて@SHIVANIGARGとBeyka –

答えて

0

アダプタデータをリフレッシュしません。ここで

は、コードがあります。あなたは私はあなたがクリアし、あなたのdataDayに新しいデータを追加するのではなく、それに変更を加えることがadapterSpDay.clear()とadapterSpDay.addかのaddAllを使うべきだと思う

spMonth.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> adapterView, View view, int arg2, long arg3) 
      { // Here create adapter for day again by passing new data and set that adapter to day spinner. 
       ............ 
         } 
+0

ありがとう@Sangeet Suresh、私は今問題を解決します。問題は日のアダプターの場所です。 –

関連する問題