2013-04-30 108 views
0

我在顯示列表視圖時遇到此錯誤。問題出在適配器上,但我找不到解決方案。這在我的logcat:Android - 與適配器中的ListView錯誤:java.lang.NullPointerException

FATAL EXCEPTION: main 
java.lang.NullPointerException 
at com.client.alm.WorkItemAdapter.getView(WorkItemAdapter.java:68) 
at android.widget.AbsListView.obtainView(AbsListView.java:2159) 
at android.widget.ListView.measureHeightOfChildren(ListView.java:1246) 
at android.widget.ListView.onMeasure(ListView.java:1158) 
at android.view.View.measure(View.java:15513) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4827) 

,這是我的適配器:

import java.util.List; 

import android.app.Activity; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

import com.client.alm.model.WorkItem; 
import com.client.alm.model.WorkItemContainer; 

public class WorkItemAdapter extends ArrayAdapter<WorkItem> { 

    private WorkItemContainer container; 
    private Context context; 
    int layoutResourceId; 

    public WorkItemAdapter(Context context, int layoutResourceId, 
      WorkItemContainer container) { 
     super(context, layoutResourceId, container.getWorkitems()); 
     this.layoutResourceId = layoutResourceId; 
     this.context = context; 
     this.container = container; 
    } 

    static class ViewHolder { 
     ImageView imageType; 
     TextView type; 
     TextView priority; 
     ImageView imagePriority; 
     TextView key; 
     ImageView imageStatus; 
     TextView status; 
    } 

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

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

      holder = new ViewHolder(); 
      holder.imageType = (ImageView) row 
        .findViewById(R.id.imageTypeWorkitem); 
      holder.type = (TextView) row.findViewById(R.id.typeWorkitem); 
      holder.imagePriority = (ImageView) row 
        .findViewById(R.id.imagePriority); 
      holder.key = (TextView) row.findViewById(R.id.key); 
      holder.imageStatus = (ImageView) row.findViewById(R.id.imageStatus); 
      holder.status = (TextView) row.findViewById(R.id.status); 

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

     WorkItem workitem = container.getWorkitems().get(position); 
     holder.type.setText(workitem.getType()); 
     // holder.imageType.setImageResource(workitem.getIcon()); 
     holder.priority.setText(workitem.getPriority()); 
     holder.key.setText(workitem.getKey()); 
     holder.status.setText(workitem.getStatus()); 

     return row; 
    } 

} 

,這我怎麼稱呼適配器在我的活動:

WorkItemContainer container = gson.fromJson(resultat, 
        WorkItemContainer.class); 

      /** 
      * Updating parsed JSON data into ListView 
      * */ 
      WorkItemAdapter adaptateur = new WorkItemAdapter(
        WorkItemActivity.this, R.layout.workitemitem, container); 

      ListView listViewWorkitem = (ListView) findViewById(R.id.list); 

      listViewWorkitem.setAdapter(adaptateur); 
      super.onPostExecute(resultat); 

我將非常感謝您的幫助。提前致謝。

+0

請問您可以告訴我們WorkItemAdapter的第68行是什麼? – edoardotognoni 2013-04-30 15:28:34

+0

行號68 \t是這一個:holder.priority.setText(workitem.getPriority()); – Wijden 2013-04-30 15:30:31

回答

6

這是因爲當你吹你的觀點:

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

     holder = new ViewHolder(); 
     holder.imageType = (ImageView) row 
       .findViewById(R.id.imageTypeWorkitem); 
     holder.type = (TextView) row.findViewById(R.id.typeWorkitem); 
     holder.imagePriority = (ImageView) row 
       .findViewById(R.id.imagePriority); 
     holder.key = (TextView) row.findViewById(R.id.key); 
     holder.imageStatus = (ImageView) row.findViewById(R.id.imageStatus); 
     holder.status = (TextView) row.findViewById(R.id.status); 

     row.setTag(holder); 

你沒有初始化的優先級字段。

+0

所以我必須做 – Wijden 2013-04-30 15:46:07

+1

只需在row.setTag之前添加此代碼: holder.priority =(TextView)row.findViewById(R.id.priority); – edoardotognoni 2013-04-30 15:50:16

+0

當然,我真的很笨,我沒有看到它,我很抱歉提出一個愚蠢的問題。 – Wijden 2013-04-30 15:56:18