2015-12-30 2 views
1

это моя ситуация: я хочу показать несколько фрагментов. В моем случае у меня есть база данных sqlite с несколькими учениками, поля: _id, Name, Lastname, sex, photoSize, field1, field2, field3, field4. Например, если field1 == 1, я должен показать фрагмент 1, если field2 == 2 i должен показать фрагмент 2 и так далее. Я не знаю, что я делаю неправильно. Вот код.FragmentPagerAdapter method, getItem() error

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

     Bundle b = getIntent().getExtras(); 
     int i = 2; 
     Cursor c; 
     Cursor c2; 

     public SectionsPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      // getItem is called to instantiate the fragment for the given page. 
      // Return a PlaceholderFragment (defined as a static inner class below). 
      String id = b.getString("id"); 
      c2 = dbm.buscarAlumno(id); 
      if (c.moveToFirst()) { 

       switch (position) { 
        case 0: 
         if (c2.getString(5).equals("1")) { 
          return PlaceholderFragment.newInstance(position); 
         } else { 
          break; 
         } 
        case 1: 
         if (c2.getString(6).equals("1")) { 
          return PlaceholderFragment.newInstance(position); 
         } else { 
          break; 
         } 
        case 2: 
         if (c2.getString(7).equals("1")) { 
          return PlaceholderFragment.newInstance(position); 
         } else { 
          break; 
         } 
        case 3: 
         if (c2.getString(8).equals("1")) { 
          return PlaceholderFragment.newInstance(position); 
         } else { 
          break; 
         } 
        case 4: 
         return PlaceholderFragment.newInstance(position); 
       } 
      } 
      return null; 
     } 

     @Override 
     public int getCount() { 
      // Show 1 total pages. 
      return 5; 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      String id = b.getString("id"); 
      c = dbm.buscarAlumno(id); 
      if (c.moveToFirst()) { 
       switch (position) { 
        case 0: 
         if (c.getString(5).equals("1")){ 
          return "PISTA"; 
         } 
        case 1: 
         if (c.getString(6).equals("1")){ 
          return "ESTABLO"; 
         }else{break;} 
        case 2: 
         if (c.getString(7).equals("1")){ 
          return "EMOCIONES"; 
         }else{break;} 
        case 3: 
         if (c.getString(8).equals("1")){ 
          return "NECESIDADES"; 
         }else{break;} 
        case 4: 
         return b.getString("alumno"); 
       } 
      }return null; 
     } 
    } 

переменной дБмВт это объявить в классе контейнера, означает DataBaseManager и buscarAlumno (идентификатор) является методом, который возвращает студент, и клянется, что этот метод работает отлично. Вот лог-код:

12-30 07:43:14.419 3104-3104/? W/EGL_emulation: eglSurfaceAttrib not implemented 
12-30 07:43:14.429 3104-3104/? D/OpenGLRenderer: Enabling debug mode 0 
12-30 07:43:17.849 1340-1354/? W/Binder: Caught a RuntimeException from the binder stub implementation. 
             java.lang.NullPointerException 
              at android.inputmethodservice.IInputMethodWrapper.setSessionEnabled(IInputMethodWrapper.java:280) 
              at com.android.internal.view.IInputMethod$Stub.onTransact(IInputMethod.java:129) 
              at android.os.Binder.execTransact(Binder.java:404) 
              at dalvik.system.NativeStart.run(Native Method) 
12-30 07:43:17.849 1253-1353/? W/InputMethodManagerService: Got RemoteException sending setActive(false) notification to pid 3076 uid 10057 

Если я не использую базу данных, отлично работает.

Пожалуйста, помогите! Спасибо, ребята!

+0

вставьте источник строки 'IInputMethodWrapper.java': 280 –

+0

у вас уже нет stacktrace - это просто андроид-крах, не определенный для вашего кода – Blundell

ответ

0

Похоже, вы возвращаете null со своего getItem() - вот почему вы получаете NullPointerException. Ваш getItem() позволяет в некоторых случаях возвращать нулевой указатель. Например, если элемент 0 и ниже не верно:

if (c2.getString(5).equals("1")) { 

затем возвращается нулевой указатель, то же самое с getPageTitle, это выглядит возможно, что вы возвращаетесь null здесь тоже.

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