Java Java FATAL EXCEPTION java.lang.NullPointerException

Soy nuevo en Android, conozco un poco JAVA, pero quiero aprender y sigo haciendo tutoriales. La idea de lo que quiero hacer es la siguiente: Tengo un menú renderizado, por ejemplo: 1. PÁJAROS 2. ROCAS 3. PLANTAS y cuando presiono PÁJAROS Quiero mostrar imágenes y una pequeña descripción. El id de las imágenes y la descripción que guardo en un xml. Me gusta esto:

<signs> <sign id="1_1" category="1"> <name>desc1</name> </sign> <sign id="1_2" category="1"> <name>desc2</name> </sign> <sign id="1_3_1" category="1"> <name>desc3</name> </sign> <sign id="1_3_2" category="1"> <name>desc4</name> </sign> </signs> 

la imagen se va como sign_1_1.png, sign_1_2.png en drawables.

Hice la galería, está mostrando, la descripción y las imágenes también son visibles. Lo hice en la galería de imágenes seleccionada para mostrar la descripción correspondiente en un TextView. Pero cuando toco, obtengo una EXCEPCIÓN FATAL:

 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) 

El código es:

 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<?> 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<?> 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<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; } } } 

No puedo obtener lo que el problema es durante horas, y tengo algunas ideas que podría estar aquí:

  i.setLayoutParams(new Gallery.LayoutParams(115, 200)); 

pero no estoy seguro de qué hacer

ACTUALIZAR

En realidad encontré el problema:

En la línea 77 estaba inicializando ImageResource con tamaño 20

 Integer[] imageResource = new Integer[20]; 

pero la cadena de datos splited tenía sólo 4 elementos

 String [] datastring = dataList.split(Reg); 

así que mImages variable

  private Integer[] mImages = takePhotos(); 

tendría 20 elementos de los cuales 16 serían nulos y al final

 i.setImageResource(mImages[position]); 

no podía hacer que los elementos nulos y se estrelló.

Así que tengo otra pregunta:

Si no conozco el tamaño del posible Integer [] ¿cómo puedo initiliaze y empujar elementos? ¿Con la lista?

4 Solutions collect form web for “Java Java FATAL EXCEPTION java.lang.NullPointerException”

En realidad encontré el problema:

En la línea 77 estaba inicializando ImageResource con tamaño 20

Entero [] imageResource = nuevo Entero [20];

pero la cadena de datos splited tenía sólo 4 elementos

 String [] datastring = dataList.split(Reg); 

así que mImages variable

  private Integer[] mImages = takePhotos(); 

tendría 20 elementos de los cuales 16 serían nulos y al final

 i.setImageResource(mImages[position]); 

no podía hacer que los elementos nulos y se estrelló.

public Object getItem (posición int) {return position; } public getItemId largo (posición int) {posición de retorno; } compruebe el tipo de devolución. Creo que ambos serán int.

Hay un error en esta línea:

 for(int k = 0; k<datastring.length;k++){ dd = datastring[k].split(Reg2); 

Pienso que hará el trabajo para que usted haga esto:

 dd = datastring.split(Reg2); 

Creo que el problema es String [] dd = null; código. u debe inicializar la variable dd

  • Problemas con Android Studio Gradle: Configuración de JDK de Gradle no válida encontrada
  • Cómo almacenar Lista de dispositivos adb en la red en php array
  • Android - ¿Cómo configurar un diseño semi-transparente?
  • ¿Cómo puedo hacer que una celda en un ListView en Android se expanda y contraiga verticalmente cuando se toca?
  • Parsing data for Android L failed.Unsupported major.minor versión 51.0
  • Cambio entre la API de Google Maps para Android v2 DEBUG y la clave de API de RELEASE
  • Zoom Vista previa de Camera2 con TextureView
  • Android: Cómo llamar a getActivity () en OnItemClickListener ()?
  • ¿Qué significa usar un "." Sin un objeto en Android (o java)?
  • ¿AsyncTask sigue esperando?
  • ¿Es posible enviar comandos HDMI CEC desde un dispositivo Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.