2015-02-09 13 views
5

Sto cercando di creare una vista elenco con BaseAdapter e continuo a ricevere un errore di riferimento oggetto Null al punto di aggiungere un oggetto a un ArrayList.NullPointerException quando si aggiunge un oggetto a ArrayList in Android

relativo codice è qui sotto:

public class MainActivity extends ActionBarActivity { 
    int[] icons = {R.drawable.icon01, R.drawable.icon02, R.drawable.icon03, R.drawable.icon04, R.drawable.icon05, R.drawable.icon06, R.drawable.icon07, R.drawable.icon08, R.drawable.icon09, R.drawable.icon10, R.drawable.icon11, R.drawable.icon12}; 
    ListView listView; 
    String[] title, desc; 

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

     listView = (ListView) findViewById(R.id.listView); 

     Resources resources = getResources(); 
     title = resources.getStringArray(R.array.titles); 
     desc = resources.getStringArray(R.array.desc); 

     RT_Adapter rt_adapter = new RT_Adapter(this, title, desc, icons); 
     listView.setAdapter(rt_adapter); 
    } 
} 

class Creator { 
    String a, b; 
    int c; 

    Creator(String d, String e, int f) { 
     this.a = d; 
     this.b = e; 
     this.c = f; 
     Log.d("RT", a +" - "+b+" - "+c); //Position 01 - This is Description 01 - 2130837556 
    } 
} 

class RT_Adapter extends BaseAdapter { 
    Context c; 
    ArrayList<Creator> list; 

    public RT_Adapter(Context context, String[] title, String[] descs, int[] icons) { 
     this.c = context; 
     for (int i = 0; i < title.length; i++) { 
      list.add(new Creator(title[i], descs[i], icons[i])); 
     } 
    } 

    ... 
} 

ottengo l'errore alla riga sottostante (scoperto durante il debug):

list.add(new Creator(title[i], descs[i], icons[i])); 

Di seguito si riporta l'errore effettivo in Logcat:

02-09 17:09:05.494  767-767/? E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.rt.droid.baseadapter01, PID: 767 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.rt.droid.baseadapter01/com.rt.droid.baseadapter01.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
      at android.app.ActivityThread.access$800(ActivityThread.java:144) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5221) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693) 
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference 
      at com.rt.droid.baseadapter01.RT_Adapter.<init>(MainActivity.java:71) 
      at com.rt.droid.baseadapter01.MainActivity.onCreate(MainActivity.java:36) 
      at android.app.Activity.performCreate(Activity.java:5933) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
            at android.app.ActivityThread.access$800(ActivityThread.java:144) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5221) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693) 

Non capisco come ottengo un oggetto nullo quando creo il nuovo oggetto Creator da aggiungere all'arr ayList.

Qualsiasi suggerimento sarebbe molto apprezzato.

+3

SUGGERIMENTO: hai inizializzato l'elenco? – Narmer

+1

Sembra lista 'ArrayList ;' non è inizializzato. –

+0

Sotto 'this.c = context;' aggiungi 'this.list = new ArrayList ();'. –

risposta

32

Non si inizializza mai ArrayList<Creator> list;. Quindi list.add(new Creator(title[i], descs[i], icons[i])); genererà un NPE.

Cambio:

ArrayList<Creator> list; 

a:

ArrayList<Creator> list = new ArrayList<Creator>; 
1

list è nullo in quanto non hai inizializzato esso.

public RT_Adapter(Context context, String[] title, String[] descs, int[] icons) { 
       list = new ArrayList<Creator>(); 
       this.c = context; 
       for (int i = 0; i < title.length; i++) { 
        list.add(new Creator(title[i], descs[i], icons[i])); 
       } 
      }