2012-04-02 72 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

相關問題