2013-07-05 3 views
0

Я новичок в android и застреваю в исключении null Pointer. Я даже пробовал защитную кодировку, но она все еще показывает ошибку.java runtimeExceptio: java.lang.nullPointerException

вот мой код:

public class MainActivity extends Activity { 

    private ArrayList<SubjectType> subjects; 
    private ArrayList<Days> days; 
    private ExpandableListAdapter adapter; 
    private ExpandableListView exv; 
    private String DayNames[] = {"Monday","Tuesday","Wednesday","Thursday","Friday"}; 
    private String TypeName[]= {"Lecture","Practical","Tutorial"}; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     loadContent(); 

     exv = (ExpandableListView) findViewById(R.id.expandableListView1); 
     adapter = new ExpandableListAdapter(MainActivity.this, subjects); 
     exv.setAdapter(adapter); 
     collapseAll(); 


    } 

    private void collapseAll() { 
     for(int i=0;i<3;i++) 
     { 
      exv.collapseGroup(i); 
     } 
    } 

    private void loadContent() { 

      int daySize,typeSize; 
      Days day_1 = null; 
      boolean False = false; 
      SubjectType sub1=null; 
      daySize = 5; 
      typeSize = 3; 

      for(int i=0;i<daySize;i++) 
      { 
       if(DayNames[i]!=null) 
       { 
        Days day_12 = day_1; 
        day_12.setDayAttributes(DayNames[i], False); 
        days.add(day_1); 
       } 
      } 

      for(int j=0;j<typeSize;j++) 
      { 
       SubjectType sub12 = sub1; 
       sub12.setChecked(false); 
       if(days!=null&&TypeName[j]!=null&&sub12!=null&&sub12!=null) 
       { 
       sub12.setDays(days); 
       sub12.setSubjectTypeName(TypeName[j]); 
       subjects.add(sub12); 
       } 
      } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

и отображение журнала-кошка:

07-05 17:14:26.942: E/AndroidRuntime(991): FATAL EXCEPTION: main 
07-05 17:14:26.942: E/AndroidRuntime(991): java.lang.RuntimeException: Unable to start activity ComponentInfo{trying.expandables/trying.expandables.MainActivity}: java.lang.NullPointerException 
07-05 17:14:26.942: E/AndroidRuntime(991): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
07-05 17:14:26.942: E/AndroidRuntime(991): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
07-05 17:14:26.942: E/AndroidRuntime(991): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
07-05 17:14:26.942: E/AndroidRuntime(991): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
07-05 17:14:26.942: E/AndroidRuntime(991): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-05 17:14:26.942: E/AndroidRuntime(991): at android.os.Looper.loop(Looper.java:137) 
07-05 17:14:26.942: E/AndroidRuntime(991): at android.app.ActivityThread.main(ActivityThread.java:5041) 
07-05 17:14:26.942: E/AndroidRuntime(991): at java.lang.reflect.Method.invokeNative(Native Method) 
07-05 17:14:26.942: E/AndroidRuntime(991): at java.lang.reflect.Method.invoke(Method.java:511) 
07-05 17:14:26.942: E/AndroidRuntime(991): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
07-05 17:14:26.942: E/AndroidRuntime(991): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
07-05 17:14:26.942: E/AndroidRuntime(991): at dalvik.system.NativeStart.main(Native Method) 
07-05 17:14:26.942: E/AndroidRuntime(991): Caused by: java.lang.NullPointerException 
07-05 17:14:26.942: E/AndroidRuntime(991): at trying.expandables.MainActivity.loadContent(MainActivity.java:54) 
07-05 17:14:26.942: E/AndroidRuntime(991): at trying.expandables.MainActivity.onCreate(MainActivity.java:23) 
07-05 17:14:26.942: E/AndroidRuntime(991): at android.app.Activity.performCreate(Activity.java:5104) 
07-05 17:14:26.942: E/AndroidRuntime(991): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
07-05 17:14:26.942: E/AndroidRuntime(991): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
07-05 17:14:26.942: E/AndroidRuntime(991): ... 11 more 

, пожалуйста, помогите!

+2

Какая строка находится в строке 54 MainActivity.java? –

+0

day_12.setDayAttributes (DayNames [i], False); строка 54 – Revic

ответ

2

Самая интересная линия StackTrace является

07-05 17:14:26.942: E/AndroidRuntime(991): at trying.expandables.MainActivity.loadContent(MainActivity.java:54) 

(довольно часто, первая линия упоминая код несистемного лучшее место, чтобы начать смотреть на)

По моим подсчетам, линия 54 является

subjects.add(sub12); 

и нигде в вашем коде. Я вижу, что объекты инициализируются, что объясняет NPE.

EDIT: хотя я искал неправильную линию, причина такая же, как уже указывалось TheCapn и Joachim Isaksson. И теперь я вижу, что вы делаете

 SubjectType sub1=null; 
     ... 
      SubjectType sub12 = sub1; 
      sub12.setChecked(false); // <--- same BOOM, other line. 

Мы начинаем видеть рисунок здесь?

Кроме того, не плотный материал как

if(days!=null&&TypeName[j]!=null&&sub12!=null&&sub12!=null) 

потому

if((days!=null) && (TypeName[j]!=null) && (sub12!=null) && (sub12!=null)) 

это гораздо легче на глазах ...

+0

i инициализированные объекты, но такая же ошибка, и они также инициализируются во время loadContent() – Revic

+0

Я отформатировал код OP немного раньше, поэтому номера строк были не такими же, как в исходном коде. Извини, я виноват. Теперь это код OP. – Pshemo

+0

@Pshemo np, исправлено (и еще один экземпляр той же проблемы) – fvu

-1

Переменная испытуемые не имеет значения!

2

onCreate звонки loadContent на линии 3 рутины.

В loadContent рутина вы звоните:

days.add(day_1); 

В первый цикл. Объявление:

private ArrayList<Days> days; 

... который никогда не был создан. Поместите это куда-нибудь, прежде чем вы попытаетесь использовать его:

days = new ArrayList<Days>(); 

EDIT:

Как уже говорили другие. Сделайте то же самое для subjects

2

Что-то не так с вашей логикой в ​​loadContent;

Days day_1 = null; 

... позже, без другого присвоения day_1, за которым следует ...

Days day_12 = day_1;       // Sets day12 to null. 
day_12.setDayAttributes(DayNames[i], False); // boom 
Смежные вопросы