2013-07-31 2 views
-1

Это мой код:Android TreeMap NullPointerException

public void onResume() { 
     super.onResume(); 
     updateSum(); 
     adapter = new SampleAdapter(getActivity()); 

     adapter.add(new SampleItem(agapimena, R.drawable.favorite_empty_gr)); 
     HotOrNot_all entry2 = new HotOrNot_all(getActivity()); 
     entry2.open(); 
     Cursor cursor = entry2.getAllData(); 
     Cursor cursor2 = entry2.getDataCat2(); 

     Map<String, List<String>> catMap = new TreeMap<String, List<String>>(); 

     if (cursor2 == null) { 
      catMap.put("Ειδήσεις", new LinkedList<String>()); 
      idMap.put("Ειδήσεις", 1); 
      catMap.get("Ειδήσεις").add(article); 
     } else { 

      for (int pos = 0; pos < cursor.getCount(); pos++) { 

       if (cursor2.moveToFirst()) // data? 

        do { 
         catMap.put(cursor2.getString(cursor2 
           .getColumnIndex("category")), 
           new LinkedList<String>()); 
         idMap.put(cursor2.getString(cursor2 
           .getColumnIndex("category")), new Integer(
           pos)); 
         catMap.get(
           cursor2.getString(cursor2 
             .getColumnIndex("category"))).add(
           article); 

        } while (cursor2.moveToNext()); 
      } 

     } 
     cursor.close(); 

     for (Entry<String, List<String>> entry : catMap.entrySet()) { 
      if (cursor2 == null) { 
       adapter.add(new SampleItem("Ειδήσεις", 
         android.R.drawable.ic_menu_search)); 

      } else { 

       adapter.add(new SampleItem(entry.getKey(), 
         android.R.drawable.ic_menu_help)); 

      } 
      titles = entry.getValue(); 
      // item2.setArticleList(titles); 
     } 
     setListAdapter(adapter); 
     entry2.close(); 
     cursor2.close(); 
    } 

Когда я запустить его, я получаю это исключение:

07-31 20:06:45.535: E/AndroidRuntime(12390): FATAL EXCEPTION: main 
07-31 20:06:45.535: E/AndroidRuntime(12390): java.lang.RuntimeException: Unable to resume activity {kostas.menu.olympiakos/kostas.menu.olympiakos.ListActivity}: java.lang.NullPointerException 
07-31 20:06:45.535: E/AndroidRuntime(12390): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2616) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2644) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2130) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at android.app.ActivityThread.access$600(ActivityThread.java:140) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at android.os.Looper.loop(Looper.java:137) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at android.app.ActivityThread.main(ActivityThread.java:4898) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at java.lang.reflect.Method.invokeNative(Native Method) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at java.lang.reflect.Method.invoke(Method.java:511) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at dalvik.system.NativeStart.main(Native Method) 
07-31 20:06:45.535: E/AndroidRuntime(12390): Caused by: java.lang.NullPointerException 
07-31 20:06:45.535: E/AndroidRuntime(12390): at java.util.TreeMap$1.compare(TreeMap.java:72) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at java.util.TreeMap$1.compare(TreeMap.java:70) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at java.util.TreeMap.find(TreeMap.java:277) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at java.util.TreeMap.putInternal(TreeMap.java:240) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at java.util.TreeMap.put(TreeMap.java:186) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at kostas.menu.olympiakos.ListActivity$SampleListFragment.onResume(ListActivity.java:258) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:917) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at android.support.v4.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:1820) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at android.support.v4.app.FragmentActivity.onPostResume(FragmentActivity.java:412) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at com.actionbarsherlock.app.SherlockFragmentActivity.onPostResume(SherlockFragmentActivity.java:68) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at android.app.Activity.performResume(Activity.java:5293) 
07-31 20:06:45.535: E/AndroidRuntime(12390): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2606) 
07-31 20:06:45.535: E/AndroidRuntime(12390): ... 12 more 

Если я изменить

Map<String, List<String>> catMap = new TreeMap<String, List<String>>(); 

в

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

приложение работает нормально. Но я хочу использовать Treemap для получения данных от a до z!

EDIT:

Нечто подобное?

for (int pos = 0; pos < cursor.getCount(); pos++) { 

      if (cursor2.moveToFirst()) // data? 

       do { 

        if(cursor2.getString(cursor2.getColumnIndex("category")).equals("")){ 
         catMap.put("null", 
           new LinkedList<String>()); 
         idMap.put(cursor2.getString(cursor2 
           .getColumnIndex("category")), new Integer(
           pos)); 
         catMap.get(
           cursor2.getString(cursor2 
             .getColumnIndex("category"))).add(
           article); 

        } 

        else{ 
        catMap.put(cursor2.getString(cursor2 
          .getColumnIndex("category")), 
          new LinkedList<String>()); 
        idMap.put(cursor2.getString(cursor2 
          .getColumnIndex("category")), new Integer(
          pos)); 
        catMap.get(
          cursor2.getString(cursor2 
            .getColumnIndex("category"))).add(
          article); 
        } 
       } while (cursor2.moveToNext()); 
     } 

    } 
    cursor.close(); 

ответ

0

TreeMap не принимает нулевые ключи. HashMap делает.

Одним из вариантов может быть замена нулевого ключа пустой строкой.

0

От Javadocs for TreeMap.put()

Броски:
NullPointerException - если указанный ключ является недействительным и эта карта использует естественное упорядочивание, или его компаратор не разрешает нулевые ключи

Ваш ключ это null в вашем put().

Хотя я подозреваю, что на самом деле проблема, и она не должна быть null, если вы хотели TreeMap, что позволило null ключи вы должны предоставить свой собственный Comparator, что определено/обработано, что это означает для заказа.

+0

Я прочитал код! –

Смежные вопросы