title: Android Java FATAL EXCEPTION java.lang.NullPointerException
body: <p>I am new to Android, know a little JAVA, but i want to learn and i keep doing tutorials. The idea of what i want to do is the following:
  I have a rendered menu, for example:
   1. BIRDS 
   2. ROCKS 
   3. PLANTS
  and when I press BIRDS I want to show pictures and a small description. The id's of the images and the description I keep in a xml. Like this:</p>
  
  <pre><code>&lt;signs&gt;
      &lt;sign id="1_1" category="1"&gt;
          &lt;name&gt;desc1&lt;/name&gt;
      &lt;/sign&gt;
      &lt;sign id="1_2" category="1"&gt;
          &lt;name&gt;desc2&lt;/name&gt;
      &lt;/sign&gt;
      &lt;sign id="1_3_1" category="1"&gt;
          &lt;name&gt;desc3&lt;/name&gt;
      &lt;/sign&gt;
      &lt;sign id="1_3_2" category="1"&gt;
          &lt;name&gt;desc4&lt;/name&gt;
      &lt;/sign&gt;
  &lt;/signs&gt;
  </code></pre>
  
  <p>the picture goes like sign_1_1.png, sign_1_2.png in drawables.</p>
  
  <p>I made the gallery, it is showing, the description and images also are visible. I made that on image gallery Selected image to show the corresponding description in a TextView.
  But when I tap i get a FATAL EXCEPTION: </p>
  
  <pre><code>E/AndroidRuntime(22141): FATAL EXCEPTION: main
  E/AndroidRuntime(22141): java.lang.NullPointerException
  E/AndroidRuntime(22141): at apcmag.examples.singleSignListItem$ImageAdapter.getView(singleSignListItem.java:117)
  E/AndroidRuntime(22141):    at android.widget.Gallery.makeAndAddView(Gallery.java:849)
  E/AndroidRuntime(22141): at android.widget.Gallery.fillToGalleryRightLtr(Gallery.java:803)
  E/AndroidRuntime(22141):    at android.widget.Gallery.fillToGalleryRight(Gallery.java:747)
  E/AndroidRuntime(22141):    at android.widget.Gallery.layout(Gallery.java:656)
  E/AndroidRuntime(22141):    at android.widget.Gallery.onLayout(Gallery.java:351)
  E/AndroidRuntime(22141):    at android.view.View.layout(View.java:13754)
  E/AndroidRuntime(22141):    at android.view.ViewGroup.layout(ViewGroup.java:4362)
  </code></pre>
  
  <p>The code is:</p>
  
  <pre><code>package apcmag.examples;
  import android.app.Activity;
  import android.content.Context;
  import android.content.Intent;
  import android.content.res.TypedArray;
  import android.os.Bundle;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.AdapterView;
  
  import android.widget.AdapterView.OnItemSelectedListener;
  import android.widget.BaseAdapter;
  import android.widget.Gallery;
  import android.widget.ImageView;
  import android.widget.TextView;
  import android.widget.Toast;
  
  
  public class singleSignListItem extends Activity
  {
  
      public void onCreate(Bundle savedInstanceState){
          super.onCreate(savedInstanceState);
  
          this.setContentView(R.layout.single_sign_gallery);
  
          Gallery g = (Gallery) findViewById(R.id.gallery);
  
          final Intent i = getIntent();
          final String REGEX = "/%%/";
  
          String product = i.getStringExtra("product");
  
          setTitle(product);
  
          g.setAdapter(new ImageAdapter(this));
  
          g.setOnItemSelectedListener(new OnItemSelectedListener() {
            public void onItemSelected(AdapterView&lt;?&gt; parent, View view, int position, long id)
              {
                  String [] products = i.getStringExtra("product_text").split(REGEX);
                  Toast.makeText(singleSignListItem.this, ""+position, Toast.LENGTH_SHORT).show();
                  TextView show_intro = (TextView) findViewById(R.id.show_intro);
                  show_intro.setText(""+products[position]);
              }
  
              public void onNothingSelected(AdapterView&lt;?&gt; parent)
              {
                  // TODO Auto-generated method stub
  
              }
          });
      }
  
      public class ImageAdapter extends BaseAdapter {
          int mGalleryItemBackground;
          private Context mContext;
  
  
  //        private Integer[] mImageIds = {
  //                R.drawable.sign_1_1,
  //                R.drawable.sign_1_1,
  //                R.drawable.sign_1_1,
  //                R.drawable.sign_1_1
  //        };
  
          private Integer[] mImages = takePhotos();
  
          public Integer[] takePhotos (){
              Intent g = getIntent();
              String Reg = "/%%/";
              String Reg2 = "_%_";
  
              String dataList = g.getStringExtra("product_text");
              String [] datastring = dataList.split(Reg);
  
              Integer[] imageResource = new Integer[20];
  
              String[] dd = null;
  
              for(int k = 0; k&lt;datastring.length;k++){
                  dd = datastring[k].split(Reg2);
  
              String imagename = "sign_"+dd[0];
  
              imageResource[k] = getResources().getIdentifier(imagename, "drawable", getPackageName());
  
              }
  
              return imageResource;
  
          }
  
          public ImageAdapter(Context c) {
              mContext = c;
              TypedArray a = obtainStyledAttributes(R.styleable.HelloGallery);
              mGalleryItemBackground = a.getResourceId(
                      R.styleable.HelloGallery_android_galleryItemBackground, 0);
              a.recycle();
          }
  
          public int getCount() {
              return mImages.length;
          }
  
          public Object getItem(int position) {
              return position;
          }
  
          public long getItemId(int position) {
              return position;
          }
  
          public View getView(int position, View convertView, ViewGroup parent) {
              ImageView i = new ImageView(mContext);
  
              i.setImageResource(mImages[position]);
              i.setLayoutParams(new Gallery.LayoutParams(115, 200));
              i.setScaleType(ImageView.ScaleType.FIT_XY);
              i.setBackgroundResource(mGalleryItemBackground);
  
              return i;
          }
      }
  
  }
  </code></pre>
  
  <p>I can't get what the problem is for hours, and i have some ideas that it might be here:</p>
  
  <pre><code> i.setLayoutParams(new Gallery.LayoutParams(115, 200));
  </code></pre>
  
  <p>but i am not so sure what to do </p>
  
  <p><strong>UPDATE</strong></p>
  
  <p>Actually i found the problem:</p>
  
  <p>On Line 77 I was Initializing ImageResource with size 20</p>
  
  <pre><code>Integer[] imageResource = new Integer[20];
  </code></pre>
  
  <p>but the splited datastring had just 4 elements</p>
  
  <pre><code>String [] datastring = dataList.split(Reg);
  </code></pre>
  
  <p>so mImages variable</p>
  
  <pre><code> private Integer[] mImages = takePhotos();
  </code></pre>
  
  <p>would have 20 elements from which 16 would be null
  and in the end </p>
  
  <pre><code>i.setImageResource(mImages[position]);
  </code></pre>
  
  <p>it could not render the null elements and it crashed. </p>
  
  <p>So there i have another question: </p>
  
  <p>If i don't know the size of the posible Integer[] how do I initiliaze and push in it elements ? With List ?</p>