2012-04-02 65 views
0

我试图通过AsyncTask将数据设置为适配器。这导致了很多悲伤 - 最近在尝试设置阵列适配器时。NullPointer为ListView设置适配器时出现异常

以下方法被调用onPostExecute();

private void setQueues(final JSONObject[] qInfo) 
{ 
    queues = new QueueItem[qInfo.length]; 

    for(int i = 0; i < qInfo.length; i++) 
    { 
     queues[i] = new QueueItem(); 
     //final int ii = i; 

     // Formatting the queue title 
     String name = qInfo[i].optString("name").replace("-", " "); 
     queues[i].label = name; 

     try { 
      if(qInfo[i].getString("active").contains("1")) 
      { 
       queues[i].value = true; 
      } 
      else 
      { 
       queues[i].value = false; 
      } 
     } 
     catch (JSONException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
    lv.setAdapter(new QueueAdapter(getActivity(), 
      R.layout.queues_items, queues)); 

这将导致以下异常运行时:link here

编辑:按照要求,这里是QueueAdapter:

public class QueueAdapter extends ArrayAdapter<QueueItem>{ 

Context context; 
int layoutResourceId;  
QueueItem data[] = null; 

public QueueAdapter(Context context, int layoutResourceId, QueueItem[] data) { 
    super(context, layoutResourceId, data); 
    this.layoutResourceId = layoutResourceId; 
    this.context = context; 
    this.data = data; 
} 

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

    if(row == null) 
    { 
     LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
     row = inflater.inflate(layoutResourceId, parent, false); 

     holder = new QueueHolder(); 
     holder.queueswitch = (Switch)row.findViewById(R.id.queues_item_switch); 
     holder.txtLabel = (TextView)row.findViewById(R.id.queues_item_text); 

     row.setTag(holder); 
    } 
    else 
    { 
    holder = (QueueHolder)row.getTag(); 
    } 

    QueueItem queue = data[position]; 
    holder.txtLabel.setText(queue.label); 
    holder.queueswitch.setChecked(queue.value); 

    return row; 
} 

static class QueueHolder 
{ 
    Switch queueswitch; 
    TextView txtLabel; 
} 
} 
+0

什么异常是什么? – Araw 2012-04-02 13:05:50

+0

检查QueuesFragment班线数98 – Abhi 2012-04-02 13:16:18

+0

似乎还有问题QueueAdapter或queues_items代码给出代码 – vipin 2012-04-02 13:16:31

回答

1
lv.setAdapter(new QueueAdapter(getActivity(), 
      R.layout.queues_items, queues)); 

这个片段应该是try块。因为如果有JSONException该数组中的所有元素都将为空...

我的意思是说..放了try块,而不是OPPT ..里面循环,如果你仍然想循环发生异常时。然后尝试使用集合,而不是阵列..

+0

是的。但是,即使没有一个JSONException它仍然会导致空指针异常 – CodePrimate 2012-04-02 13:13:01

+0

@litemode ..你需要确保该数组中的元素不是在任何情况下空。为什么不试试集合,而不是阵列..使用不允许空值的Hashtable .. – ngesh 2012-04-02 13:17:42

+0

这不回答我的问题。 qInfo在这种情况下保存有效数据。 QueueItem也是如此。 – CodePrimate 2012-04-02 13:19:51

相关问题