2013-09-24 24 views
0

我有這樣的ListView,當我啓動應用程序,它提供了空指針異常,但如果視圖走了,它不給任何錯誤,Android的ListView控件提供了NullPointerException異常

lVers = (ListView) view.findViewById(R.id.lVers); 

與適配器

RechercheAdapter adapter2 = new RechercheAdapter(getActivity(), R.layout.elem_recherche, listPaysVers); 
lVers.setAdapter(adapter2); 

這裏是適配器類

public class RechercheAdapter extends ArrayAdapter<Pays> { 

     Context context; 
     ArrayList<Pays> data; 

     public RechercheAdapter(Context context, int textViewResourceId, ArrayList<Pays> d) { 
      super(context, textViewResourceId, d); 
      this.data = d; 
     } 

     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return data.size(); 
     } 

     @Override 
     public Pays getItem(int position) { 
      // TODO Auto-generated method stub 
      return data.get(position); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      Pays p = data.get(position); 

      LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View v = inflater.inflate(R.layout.elem_recherche, null); 

      ImageView drap = (ImageView) v.findViewById(R.id.drap); 
      drap.setImageDrawable(Utils.getBitmapFromBase64FullSize(p.getDreapeau64(), getActivity())); 

      TextView nom = (TextView) v.findViewById(R.id.nom); 
      nom.setText(p.getPays()); 

      return convertView; 
     } 

    } 

當我嘗試啓動應用程序,我得到一個nullpointerexception,

09-24 12:52:37.095: E/AndroidRuntime(30836): FATAL EXCEPTION: main 
09-24 12:52:37.095: E/AndroidRuntime(30836): java.lang.NullPointerException 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.AbsListView.obtainView(AbsListView.java:2467) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.ListView.makeAndAddView(ListView.java:1775) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.ListView.fillDown(ListView.java:678) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.ListView.fillFromTop(ListView.java:739) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.ListView.layoutChildren(ListView.java:1628) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.AbsListView.onLayout(AbsListView.java:2300) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.View.layout(View.java:14072) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.ViewGroup.layout(ViewGroup.java:4607) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1644) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.LinearLayout.onLayout(LinearLayout.java:1428) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.View.layout(View.java:14072) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.ViewGroup.layout(ViewGroup.java:4607) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.LinearLayout.onLayout(LinearLayout.java:1426) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.View.layout(View.java:14072) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.ViewGroup.layout(ViewGroup.java:4607) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.LinearLayout.onLayout(LinearLayout.java:1426) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.View.layout(View.java:14072) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.ViewGroup.layout(ViewGroup.java:4607) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.View.layout(View.java:14072) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.ViewGroup.layout(ViewGroup.java:4607) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:948) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.View.layout(View.java:14072) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.ViewGroup.layout(ViewGroup.java:4607) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.View.layout(View.java:14072) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.ViewGroup.layout(ViewGroup.java:4607) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.View.layout(View.java:14072) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.ViewGroup.layout(ViewGroup.java:4607) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.LinearLayout.onLayout(LinearLayout.java:1426) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.View.layout(View.java:14072) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.ViewGroup.layout(ViewGroup.java:4607) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.LinearLayout.onLayout(LinearLayout.java:1426) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.View.layout(View.java:14072) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.ViewGroup.layout(ViewGroup.java:4607) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.LinearLayout.onLayout(LinearLayout.java:1426) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.View.layout(View.java:14072) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.ViewGroup.layout(ViewGroup.java:4607) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.View.layout(View.java:14072) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.ViewGroup.layout(ViewGroup.java:4607) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:948) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.View.layout(View.java:14072) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.ViewGroup.layout(ViewGroup.java:4607) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:948) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.View.layout(View.java:14072) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.ViewGroup.layout(ViewGroup.java:4607) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.View.layout(View.java:14072) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.ViewGroup.layout(ViewGroup.java:4607) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.LinearLayout.onLayout(LinearLayout.java:1426) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.View.layout(View.java:14072) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.view.ViewGroup.layout(ViewGroup.java:4607) 
09-24 12:52:37.095: E/AndroidRuntime(30836): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
09-24 12:52:37.095: E/AndroidRuntime(30836): 

任何人有關於發生了什麼事情的線索? 感謝

+0

安置自己的'在XML –

+0

可能的複製listview'對象被創建列表:HTTP:// stackoverflow.com/questions/9645383/android-listview-nullpointerexception –

回答

8

返回視圖V不convertView或

convertView=inflater.inflate(R.layout.elem_recherche, null); 
+1

非常感謝!我對那個很蠢:D –

+0

非常感謝!我在設置錯誤的佈局xml時也很蠢,我再次檢查我的代碼,它會幫助我。 –

1

替換此:

View v = inflater.inflate(R.layout.elem_recherche, null); 

有了:

convertView = inflater.inflate(R.layout.elem_recherche, null); 
1

的問題存在於你的getView(int, View, ViewGroup)方法:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ... 
     View v = inflater.inflate(R.layout.elem_recherche, null); 
     ... 
     return convertView; 
    } 

請注意,您要返回convertView,而不是v這是您的虛擬佈局。 convertView將爲null,因爲它未啓動至視圖,因此在訪問時會導致NullPointerException

試試這個:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    Pays p = data.get(position); 

    LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    if(convertView == null) { 
     convertView = inflater.inflate(R.layout.elem_recherche, null, false); 
    } 

    ImageView drap = (ImageView) convertView.findViewById(R.id.drap); 
    drap.setImageDrawable(Utils.getBitmapFromBase64FullSize(p.getDreapeau64(), getActivity())); 

    TextView nom = (TextView) convertView.findViewById(R.id.nom); 
    nom.setText(p.getPays()); 

    return convertView; 
} 
1

試試這個..

public class RechercheAdapter extends ArrayAdapter<Pays> { 

     Context context; 
     ArrayList<Pays> data; 

     public RechercheAdapter(Context context, int textViewResourceId, ArrayList<Pays> d) { 
      super(context, textViewResourceId, d); 
      LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      this.data = d; 
     } 

     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return data.size(); 
     } 

     @Override 
     public Pays getItem(int position) { 
      // TODO Auto-generated method stub 
      return data.get(position); 
     } 

@Override 
     public View getView(int position, View convertView, ViewGroup parent) { 

      View view = convertView; 
      Pays p = data.get(position); 
      view = inflater.inflate(R.layout.elem_recherche, null); 

      ImageView drap = (ImageView) v.findViewById(R.id.drap); 
      drap.setImageDrawable(Utils.getBitmapFromBase64FullSize(p.getDreapeau64(), getActivity())); 

      TextView nom = (TextView) v.findViewById(R.id.nom); 
      nom.setText(p.getPays()); 

      return convertView; 
     } 
+0

@ user2427819各種方式歡迎..! – Hariharan

1

會人爲增加一個視圖並返回一個視圖這就是爲什麼它是空.. 更改getview metgod這樣。 。

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     Pays p = data.get(position); 
if(convertView==null){ 
      LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.elem_recherche, null); 
      ImageView drap = (ImageView) convertView.findViewById(R.id.drap); 
      TextView nom = (TextView) convertView.findViewById(R.id.nom); 
} 
     drap.setImageDrawable(Utils.getBitmapFromBase64FullSize(p.getDreapeau64(), getActivity())); 
      nom.setText(p.getPays()); 

     return convertView; 
    } 
1

使用 convertView = inflater.inflate(R.layout.elem_recherche, null); 而不是 View v = inflater.inflate(R.layout.elem_recherche, null);然後,返回convertView;

1

我認爲你必須給家長佈局到你要膨脹,因爲在父母佈局

view = mInflater.inflate(R.layout.elem_recherche, parent, false); 
相關問題