2012-04-18 36 views
6

Estoy codificando un adaptador personalizado para un ListView que tiene una lista personalizada.NullPointerException en el adaptador personalizado getView

obviamente, tengo que escribir la función getView. Así que aquí está mi código:

/*1*/ public View getView(int position, View convertView, ViewGroup parent) { 
/*2*/ View vi = convertView; 
/*3*/ if (convertView == null) 
/*4*/  vi = inflater.inflate(R.layout.result_list_item, null); 
/*5*/ 
/*6*/ TextView title = (TextView) vi.findViewById(R.id.tvTitle); 
/*7*/ TextView subtitle = (TextView) vi.findViewById(R.id.tvSubTitle); 
/*8*/ ImageView image = (ImageView) vi.findViewById(R.id.imageView1); 
/*9*/ 
/*10*/ title.setText(data.get(position).getDescription().toString()); 
/*11*/ subtitle.setText(data.get(position).getDate().toString()); 
/*12*/ String img = "http://someLink/" + data.get(position).getId() + "a_t.jpg"; 
/*13*/ imageLoader.DisplayImage(img, image); 
/*14*/ return vi; 
/*15*/ } 

embargo, he notado que en la línea número 6 del programa se bloquea con una excepción NullPointer.

Aquí está mi informe de bloqueo:

04-18 09:33:32.745: E/AndroidRuntime(2209): FATAL EXCEPTION: main 
04-18 09:33:32.745: E/AndroidRuntime(2209): java.lang.NullPointerException 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at com.package.mojo.NoPicAdapter.getView(NoPicAdapter.java:46) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.widget.AbsListView.obtainView(AbsListView.java:1554) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.widget.ListView.measureHeightOfChildren(ListView.java:1264) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.widget.ListView.onMeasure(ListView.java:1175) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.view.View.measure(View.java:8366) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:386) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:309) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.view.View.measure(View.java:8366) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.view.View.measure(View.java:8366) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:531) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:309) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.view.View.measure(View.java:8366) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.view.View.measure(View.java:8366) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.view.ViewRoot.performTraversals(ViewRoot.java:847) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1868) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.os.Looper.loop(Looper.java:123) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at android.app.ActivityThread.main(ActivityThread.java:3691) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at java.lang.reflect.Method.invoke(Method.java:507) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 
04-18 09:33:32.745: E/AndroidRuntime(2209):  at dalvik.system.NativeStart.main(Native Method) 

por supuesto, la disposición y los artículos ellos mismos existen ...

alguna idea?

actualización: cuando miro las variables durante la depuración, veo que vi no se ha inflado (vi == null), ¿por qué?

+1

¿Podría decirnos qué fila del fragmento de código publicado corresponde a 'NoPicAdapter.java: 46'? – dbm

+0

¿Su línea número 6 en el código anterior corresponde a la línea número 46 en NoPicAdapter? Además, ¿cómo estás creando el objeto inflador? – Shubhayu

+0

línea 6 es en realidad la línea 46 en el código original, acaba de editar aquí para la marsupial de explicar mi pregunta – thepoosh

Respuesta

13

cambiar esta situación:

vi = inflater.inflate(R.layout.result_list_item, null); 

A esto:

vi = inflater.inflate(R.layout.result_list_item, parent, false); 

así es como su adaptador debe ser:

public class NoPicAdapter extends ArrayAdapter<NewAndCalendar> { 

    private ArrayList<NewAndCalendar> data; 
    private Activity mActivity; 
    private LayoutInflater inflater = null; 

    public NoPicAdapter(Activity a, ArrayList<NewAndCalendar> d) { 
     super(a, R.layout.no_pic_list_item, d); 
     mActivity = a; 
     data = d; 
     inflater = (LayoutInflater) mActivity 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 


    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View vi = convertView; 
     if (vi == null) 
      vi = inflater.inflate(R.layout.no_pic_list_item, parent, false); 
     TextView title = (TextView) vi.findViewById(R.id.noPicTitle); 
     TextView subtitle = (TextView) vi.findViewById(R.id.noPicSubtitle); 

     title.setText(data.get(position).getmTitle()); 
     subtitle.setText(data.get(position).getmPubDate()); 

     return vi; 
    } 

} 
+0

cambiado a la segunda versión, vi igual a cero – thepoosh

+0

pegue el código completo – waqaslam

+0

[este] (http: // pastie. org/private/nipgdadde02hft9gx0f0a) es todo mi código para el adaptador personalizado – thepoosh

1

está inicializando inflado? si no lo inicializas

inflater = getLayoutInflater(); 

o

inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
+1

el código de inicialización está en el constructor: 'inflater = (LayoutInflater) mActivity.getSystemService (Context.LAYOUT_INFLATER_SERVICE);' – thepoosh

+0

y ¿es el contexto de actividad que está pasando de la actividad? – Shubhayu

+0

sí, mActivity es la actividad transmitida para el constructor. – thepoosh

2

Prueba este

vi = LayoutInflater.from (mActivity) .inflate (R.layout.result_list_item, null);

si mActivity es su contexto de actividad pasado de la actividad en la que está creando el objeto de este adaptador.

+0

que hizo el truco, el único problema ahora es la nueva 'NullPointerException' que obtuve del resto del código ... – thepoosh

+0

¿Cuál es el nuevo problema? – Shubhayu

+0

problemas con la implementación de SAXParser, creo. algo no se está analizando correctamente – thepoosh

Cuestiones relacionadas