-1

dans mon projet Je dois définir dans une activité ListView multiple (le nombre de ces ListView dépend de la taille d'une ArrayList).Android - Custom ArrayAdapter Exception pointeur nul

Je dois donc ajouter dynamiquement ListView et Custom ArrayAdapter. J'ai eu l'idée de faire un AsyncTask pour faire ces choses sales: faire un tableau de ArrayAdapter personnalisé et pour définir dynamiquement un ListView pour chaque carte dans le tableau.

Mais le principal problème est que je suis quand j'essaie juste de faire MyAdapterArray.add(MyAdapter) ... J'ai une exception de pointeur nul:

03-15 15:24:21.738: E/AndroidRuntime(21672): FATAL EXCEPTION: main 
03-15 15:24:21.738: E/AndroidRuntime(21672): java.lang.RuntimeException: Unable to start activity ComponentInfo{azur.mobile.incomrestau/azur.mobile.incomrestau.SousCarteActivity}: java.lang.NullPointerException 
03-15 15:24:21.738: E/AndroidRuntime(21672): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100) 
03-15 15:24:21.738: E/AndroidRuntime(21672): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125) 
03-15 15:24:21.738: E/AndroidRuntime(21672): at android.app.ActivityThread.access$600(ActivityThread.java:140) 
03-15 15:24:21.738: E/AndroidRuntime(21672): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227) 
03-15 15:24:21.738: E/AndroidRuntime(21672): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-15 15:24:21.738: E/AndroidRuntime(21672): at android.os.Looper.loop(Looper.java:137) 
03-15 15:24:21.738: E/AndroidRuntime(21672): at android.app.ActivityThread.main(ActivityThread.java:4898) 
03-15 15:24:21.738: E/AndroidRuntime(21672): at java.lang.reflect.Method.invokeNative(Native Method) 
03-15 15:24:21.738: E/AndroidRuntime(21672): at java.lang.reflect.Method.invoke(Method.java:511) 
03-15 15:24:21.738: E/AndroidRuntime(21672): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 
03-15 15:24:21.738: E/AndroidRuntime(21672): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 
03-15 15:24:21.738: E/AndroidRuntime(21672): at dalvik.system.NativeStart.main(Native Method) 
03-15 15:24:21.738: E/AndroidRuntime(21672): Caused by: java.lang.NullPointerException 
03-15 15:24:21.738: E/AndroidRuntime(21672): at azur.mobile.incomrestau.SousCarteActivity.onCreate(SousCarteActivity.java:43) 
03-15 15:24:21.738: E/AndroidRuntime(21672): at android.app.Activity.performCreate(Activity.java:5206) 
03-15 15:24:21.738: E/AndroidRuntime(21672): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083) 
03-15 15:24:21.738: E/AndroidRuntime(21672): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064) 
03-15 15:24:21.738: E/AndroidRuntime(21672): ... 11 more 

Mon activité est ici:

public class SousCarteActivity extends Activity { 
    private String nom_categorie; 
    private ArrayList<String> arraySousCategoriesName; 
    private ArrayList<ArrayList<ElementFood>> arraySousCategories; 
    private ArrayList<MyAdapter> myAdapters; 

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

     nom_categorie = getIntent().getStringExtra("nom_categorie"); 

     FoodsContainer.setSousCategoriesNameArray(nom_categorie); 
     FoodsContainer.setSousCategoriesArray(nom_categorie); 

     arraySousCategories = FoodsContainer.sousCategoriesArray; 

     MyAdapter adapter = new MyAdapter(this, arraySousCategories.get(0)); 
     myAdapters.add(0, adapter); 

     //new DoDirtyJobAsyncTask().execute(); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     return super.onOptionsItemSelected(item); 
    } 

    private class DoDirtyJobAsyncTask extends AsyncTask<Void, MyAdapter, Void> { 
     @Override 
     protected Void doInBackground(Void... params) { 
      for (ArrayList<ElementFood> arrayElement : arraySousCategories) { 
       MyAdapter myAdapter = new MyAdapter(getApplicationContext(), arrayElement); 
       myAdapters.add(myAdapter); 
       publishProgress(myAdapter); 
      } 
      return null; 
     } 

     @Override 
     protected void onProgressUpdate(MyAdapter... myAdapters) { 
      int currViewId = 1; 
      for (final MyAdapter myAdapter: myAdapters) { 
       ListView listview = new ListView(getApplicationContext(), null); 
       listview.setId(currViewId); 
       listview.setAdapter(myAdapter); 

       LinearLayout ll = (LinearLayout) findViewById(R.id.souscarte_linearlayout); 
       ll.addView(listview); 
       currViewId++; 
      } 
     } 

    } 

    class MyAdapter extends ArrayAdapter<ElementFood> 
    { 
      LayoutInflater inflat; 
      private ArrayList<ElementFood> items; 

      public MyAdapter(Context context, ArrayList<ElementFood> objects) 
      { 
       super(context, R.layout.activity_souscarte_list_item_elementsouscategorie, objects); 
       this.items = objects; 
       this.inflat = LayoutInflater.from(context); 
      } 
      private class ViewHolder{ 
       public TextView title; 
       public TextView prix; 
       public TextView desc; 
      } 

      @Override 
      public View getView(int position, View convertView, ViewGroup parent) { 
       ViewHolder holder = null; 
       if (convertView == null) { 
         holder = new ViewHolder(); 
         convertView = inflat.inflate(R.layout.activity_souscarte_list_item_elementsouscategorie, null); 
         holder.title = (TextView) convertView.findViewById(R.id.souscarte_element_title); 
         holder.prix = (TextView) convertView.findViewById(R.id.souscarte_element_prix); 
         holder.desc = (TextView) convertView.findViewById(R.id.souscarte_element_desc); 

         convertView.setTag(holder); 
       } else { 
         holder = (ViewHolder) convertView.getTag(); 
       } 
       ElementFood element = items.get(position); 
       if (element != null) { 
        holder.title.setText(element.getName()); 
        holder.prix.setText(Float.toString(element.getPrice())); 
        holder.desc.setText(element.getDescription()); 
       } 
       return convertView; 
      } 
    } 
} 

PS: Mon tableau "arraySousCategories" est bon, et l'adaptateur fonctionne très bien quand je l'utilise normalement (sans le tableau Adapter) ..

Merci

+0

la ligne Qu'est-ce que 43? Sans le fichier complet, nous ne pouvons pas vraiment deviner. Mais quelque chose sur cette ligne est déréférencer un null. –

Répondre

0

Vous voulez probablement ArrayList<MyAdapter> myAdapters = new ArrayList<MyAdapter>() avant d'appeler myAdapters.add(0, adapter) autrement myAdapters est nulle

+0

Ahah !! Qu'est-ce qu'une blague, le vendredi est trop dur pour moi XD merci Anton;) – eento

2

À cette ligne myAdapters.add(0, adapter); dans votre onCreate, myAdapters est null.

+0

Lol Post inutile, je peux lire aussi .. – eento