2014-11-09 1 views
-1

내 앱에서 이번 달 및 지난 두 달 간의 데이터를 표시해야합니다. 나는 이것을 위해 확장 가능한리스트 뷰를 사용하고있다. 하지만 널 포인터 예외가 나타납니다..put()의 ExpandableListView에있는 Null 포인터 예외

내 클래스 :

public class HistoryFragment extends Fragment { 

    HashMap<String,List<String>> months_parent; 
    List<String> child_list; 
    ExpandableListView exp_list; 
    monthAdapter adapter; 
    View v; 

    Calendar cal = Calendar.getInstance(); 
    int y = cal.get(Calendar.YEAR); 
    SQLiteDatabase db; 
    DbHelper dbhelper; 

    public HistoryFragment(){ 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     v = inflater.inflate(R.layout.fragment_history, container, false); 
     exp_list = (ExpandableListView) v.findViewById(R.id.months);   

     String from[] = {DbHelper.NOTE, DbHelper.AMOUNT, DbHelper.MONTH, DbHelper.YEAR}; 
     dbhelper = new DbHelper(getActivity()); 
     db = dbhelper.getReadableDatabase(); 

     List<String> curr = new ArrayList<String>(); 
     List<String> currm1 = new ArrayList<String>(); 
     List<String> currm2 = new ArrayList<String>(); 

     int m = cal.get(Calendar.MONTH); 
     int n = m; 
     int last = m-2; 
     String noteamt; 
     double amt,totcurr=0.0,totcurrm1=0.0,totcurrm2=0.0; 
     Cursor c = db.query(DbHelper.TABLE_NAME, from, null, null, null, null,DbHelper.YEAR+" desc,"+DbHelper.MONTH+" desc"); 
     c.moveToFirst(); 
     if(c!=null) 
     { 
      while(c.moveToNext() && m>=last) 
      { 
       m=Integer.parseInt(c.getString(c.getColumnIndex(DbHelper.MONTH))); 
       amt = Double.parseDouble(c.getString(c.getColumnIndex(DbHelper.AMOUNT))); 
       //noteamt = c.getString(c.getColumnIndex(DbHelper.NOTE))+"("+c.getString(c.getColumnIndex(DbHelper.AMOUNT))+")"; 
       noteamt = "Let's try this"; 
       if(m==n) 
       { 
        curr.add(noteamt); 
        totcurr+=amt; 
       } 
       else if(m==n-1) 
       { 
        currm1.add(noteamt); 
        totcurrm1+=amt; 
       } 
       else if(m==n-2) 
       { 
        currm2.add(noteamt); 
        totcurrm2+=amt; 
       } 
      } 
     } 
     c.close(); 



     String m1 = goswitch(n); 
     months_parent.put(m1+" ("+totcurr+")", curr); //exception here 
     String m2 = goswitch(n-1); 
     months_parent.put(m2+" ("+totcurrm1+")",currm1);//exception here 
     String m3 = goswitch(n-2); 
     months_parent.put(m3+" ("+totcurrm2+")", currm2); //exception here 

     child_list = new ArrayList<String>(months_parent.keySet()); 
     adapter = new monthAdapter(getActivity(), months_parent, child_list); 
     exp_list.setAdapter(adapter); 
     return v; 
    } 

    String goswitch(int n) 
    { 
     String monthyr = null; 
     switch(n) 
     { 
     case 0: 
      return "January "+y; 
     case 1: 
      return "February "+y; 
     case 2: 
      return "March "+y; 
     case 3: 
      return "April "+y; 
     case 4: 
      return "May "+y; 
     case 5: 
      return "June "+y; 
     case 6: 
      return "July "+y; 
     case 7: 
      return "August "+y; 
     case 8: 
      return "September "+y; 
     case 9: 
      return "October "+y; 
     case 10: 
      return "November "+y; 
     case 11: 
      return "December "+y; 
     } 
     return monthyr; 
    } 
} 

내가 오류를 받고 있어요 여기서 사용 된 풋은 세 가지 라인.

11-09 21 : 11 : 여기서 로그 캣은 31.610 : E/AndroidRuntime (2683) FATAL EXCEPTION : 메인 11-09 21 : 11 : 31.610 : E/AndroidRuntime (2683) 자바 .lang.NullPointerException 11-09 21 : 11 : 31.610 : E/AndroidRuntime (2683) : com.twistedlines.overbudget.HistoryFragment.onCreateView (HistoryFragment.java:104) 11-09 21 : 11 : 31.610 : E/AndroidRuntime (2683) : android.support.v4.app.Fragment.performCreateView (Fragment.java:1500) 11-09 21 : 11 : 31.610 : E/AndroidRuntime (2683) : android.support.v4 .app.FragmentManagerImpl.moveToState (FragmentManager.java:927) 11-09 21 : 11 : 31.610 : E/AndroidRuntime (2683) : android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1104) 11-09 21 : 11 : 31.610 : E/AndroidRuntime (2683) : android.support.v4.app.BackStackRecord.run (BackStackRecord.java:682) 11-09 21 : 11 : 31.610 : E/AndroidRuntime (2683) : android.support.v4.app .FragmentManagerImpl.execPendingActions (FragmentManager.java:1467) 11-09 21 : 11 : 31.610 : E/AndroidRuntime (2683) : android.support.v4.app.FragmentManagerImpl $ 1.run (FragmentManager.java:440) 11-09 21 : 11 : 31.610 : E/AndroidRuntime (2683) : android.os.Handler.handleCallback (Handler.java:615) 11-09 21 : 11 : 31.610 : E/AndroidRuntime (2683) : at android.os.Handler.dispatchMessage (Handler.java:92) 11-09 21 : 11 : 31.610 : E/AndroidRuntime (2683) : android.os.Looper.loop (Looper.java:137) 09 21 : 11 : 31.610 : E/AndroidRuntime (2683) : android.app.ActivityThread.main (ActivityThread.java:4792) 11-09 21 : 11 : 31.610 : E/AndroidRuntime (2683) : java.lang.reflect.Method.invokeNative (네이티브 메소드)

무엇이 잘못되었는지 말해 줄 수 있습니까?

답변

0

당신이 months_parent를 초기화하는 것을 잊지 그래서

months_parent = new HashMap<String,List<String>>(); 

oncreateview 방법으로 초기화 으로 널 (NULL) 해시 맵에 값을 넣어하거나 변경하려는 것으로 보인다

HashMap<String,List<String>> months_parent; 

HashMap<String,List<String>> months_parent = new HashMap<String,List<String>>(); 
+0

정말 고마워요. 어리석은 실수. – kray