【问题标题】:ListView + ArrayList + AsyncTask [duplicate]ListView + ArrayList + AsyncTask [重复]
【发布时间】:2014-12-16 21:10:42
【问题描述】:

我的想法是使用 AsynTask 下载数据集并存储在 arrayList 中。我已经检查过并且运行良好。 在 onPostExecute 方法中,我调用一个函数来更新我的 listView 并加载存储在 ArrayList 中的数据。

代码:

protected void onPostExecute(String result) 
{       
    progressDialog.setProgress(99);
    actualizarDisplay();
}

actulizarDisplay 方法:

dataAdapter = new MyCustomAdapter(this,R.layout.servicio, listaServicios);
ListView listView = (ListView) findViewById(R.id.listaServ);
listView.setAdapter(dataAdapter);

还有 MyCustomAdapter 类:

private class MyCustomAdapter extends ArrayAdapter<Servicio> 
{

private ArrayList<Servicio> servicioList;

public MyCustomAdapter(Context context, int textViewResourceId,ArrayList<Servicio> servicioList) 
{
    super(context, textViewResourceId,servicioList);
    this.servicioList = new ArrayList<Servicio>();
    this.servicioList.addAll(servicioList);
}

private class ViewHolder 
{
   TextView nombre, hora, lugar, fecha;
   ImageView tipo;   
}

@Override
public View getView(int position, View convertView, ViewGroup parent) 
{
    ViewHolder holder = null;

    if (convertView == null) 
    {
       LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
       convertView = vi.inflate(R.layout.servicio, null);

       holder = new ViewHolder();
       holder.nombre = (TextView) convertView.findViewById(R.id.titulo);
       holder.lugar = (TextView) convertView.findViewById(R.id.lugar);
       holder.hora = (TextView) convertView.findViewById(R.id.hora);
       holder.fecha = (TextView) convertView.findViewById(R.id.fecha);
       convertView.setTag(holder);
    }
     else 
     {
        holder = (ViewHolder) convertView.getTag();
     }

     Servicio servicio = servicioList.get(position);
Log.i("ConvertView", servicio.getNombre()); // the correct value is displayed
     holder.nombre.setText(servicio.getNombre());
     holder.hora.setText(servicio.getHora());
     holder.lugar.setText(servicio.getLugar());
     holder.fecha.setText(servicio.getFecha());

     if (servicio.tipo == 0)
           holder.tipo.setImageResource(R.drawable.cultural);

     return convertView;

}   

}

这是 logcat 中的错误,第 423 行是:holder.nombre.setText(servicio.getNombre());

致命异常:main java.lang.NullPointerException at app.serviciosprote.Inicio$MyCustomAdapter.getView(Inicio.java:423)
在 android.widget.AbsListView.obtainView(AbsListView.java:2350) 在 android.widget.ListView.measureHeightOfChildren(ListView.java:1409) 在 android.widget.ListView.onMeasure(ListView.java:1273) 在 android.view.View.measure(View.java:15286) 在 android.widget.RelativeLayout.measureChild(RelativeLayout.java:602) 在 android.widget.RelativeLayout.onMeasure(RelativeLayout.java:415) 在 android.view.View.measure(View.java:15286) 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4832) 在 android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390) 在 android.widget.LinearLayout.measureVertical(LinearLayout.java:681) 在 android.widget.LinearLayout.onMeasure(LinearLayout.java:574) 在 android.view.View.measure(View.java:15286) 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4832) 在 android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
在 android.view.View.measure(View.java:15286) 在 android.widget.LinearLayout.measureVertical(LinearLayout.java:833) 在 android.widget.LinearLayout.onMeasure(LinearLayout.java:574) 在 android.view.View.measure(View.java:15286) 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4832) 在 android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 在 com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2269)

感谢您的帮助

【问题讨论】:

  • 我认为问题已经解决了,如果 TextView 的文本很长并且不适合失败
  • 你的解释没有真正的意义。您描述的内容不会导致您发布的堆栈跟踪。
  • 关于点击监听事件,谷歌一下,你会找到足够多的 tuts 来帮助你..问另一个问题可能是骗人的..

标签: android android-listview arraylist


【解决方案1】:
Comment  

这可能意味着您的第一个文本视图不在此 xml 文件中

servicio.xml

没有 id 为 titulo 的 textview

 holder.nombre = (TextView) convertView.findViewById(R.id.titulo);

因此是空指针

仔细检查您是否在正确的 xml 中使用正确的 id 调用正确的 textview

【讨论】:

  • 谢谢。你能说我如何为点击事件做一个监听器吗?
  • 再问一个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 2011-12-14
  • 1970-01-01
  • 2020-04-04
  • 1970-01-01
  • 2015-10-04
  • 2016-07-04
相关资源
最近更新 更多