2011-05-10 83 views
1

我有一個自定義適配器爲ListView提供數據。一切運行良好,但「突然」(我沒有什麼現在發生的另一種說法),我的應用程序啓動時加載我的活動與列表視圖崩潰:Android自定義適配器getView()NullPointerException超出無處!

W/dalvikvm( 228): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 

E/AndroidRuntime( 228): Uncaught handler: thread main exiting due to uncaught exception 

E/AndroidRuntime( 228): java.lang.NullPointerException 

E/AndroidRuntime( 228): at AdvertisementListAdapter.getView(AdvertisementListAdapter.java:72) 

E/AndroidRuntime( 228): at android.widget.AbsListView.obtainView(AbsListView.java:1274) 

E/AndroidRuntime( 228): at android.widget.ListView.measureHeightOfChildren(ListView.java:1147) 

E/AndroidRuntime( 228): at android.widget.ListView.onMeasure(ListView.java:1060) 

E/AndroidRuntime( 228): at android.view.View.measure(View.java:7964) 

E/AndroidRuntime( 228): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023) 

E/AndroidRuntime( 228): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:888) 

E/AndroidRuntime( 228): at android.widget.LinearLayout.measureVertical(LinearLayout.java:350) 

E/AndroidRuntime( 228): at android.widget.LinearLayout.onMeasure(LinearLayout.java:278) 

E/AndroidRuntime( 228): at android.view.View.measure(View.java:7964) 

E/AndroidRuntime( 228): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023) 

E/AndroidRuntime( 228): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) 

E/AndroidRuntime( 228): at android.view.View.measure(View.java:7964) 

E/AndroidRuntime( 228): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023) 

E/AndroidRuntime( 228): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) 

E/AndroidRuntime( 228): at android.view.View.measure(View.java:7964) 

E/AndroidRuntime( 228): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023) 

E/AndroidRuntime( 228): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) 

E/AndroidRuntime( 228): at android.view.View.measure(View.java:7964) 

E/AndroidRuntime( 228): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023) 

E/AndroidRuntime( 228): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) 

E/AndroidRuntime( 228): at android.view.View.measure(View.java:7964) 

E/AndroidRuntime( 228): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023) 

E/AndroidRuntime( 228): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) 

E/AndroidRuntime( 228): at android.view.View.measure(View.java:7964) 

E/AndroidRuntime( 228): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023) 

E/AndroidRuntime( 228): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:888) 

E/AndroidRuntime( 228): at android.widget.LinearLayout.measureVertical(LinearLayout.java:350) 

E/AndroidRuntime( 228): at android.widget.LinearLayout.onMeasure(LinearLayout.java:278) 

E/AndroidRuntime( 228): at android.view.View.measure(View.java:7964) 

E/AndroidRuntime( 228): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023) 

E/AndroidRuntime( 228): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) 

E/AndroidRuntime( 228): at android.view.View.measure(View.java:7964) 

E/AndroidRuntime( 228): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023) 

E/AndroidRuntime( 228): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) 

E/AndroidRuntime( 228): at android.view.View.measure(View.java:7964) 

E/AndroidRuntime( 228): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023) 

E/AndroidRuntime( 228): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) 

E/AndroidRuntime( 228): at android.view.View.measure(View.java:7964) 

E/AndroidRuntime( 228): at android.view.ViewRoot.performTraversals(ViewRoot.java:763) 

E/AndroidRuntime( 228): at android.view.ViewRoot.handleMessage(ViewRoot.java:1633) 

E/AndroidRuntime( 228): at android.os.Handler.dispatchMessage(Handler.java:99) 

E/AndroidRuntime( 228): at android.os.Looper.loop(Looper.java:123) 

E/AndroidRuntime( 228): at android.app.ActivityThread.main(ActivityThread.java:4363) 

E/AndroidRuntime( 228): at java.lang.reflect.Method.invokeNative(Native Method) 

E/AndroidRuntime( 228): at java.lang.reflect.Method.invoke(Method.java:521) 

E/AndroidRuntime( 228): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 

E/AndroidRuntime( 228): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

E/AndroidRuntime( 228): at dalvik.system.NativeStart.main(Native Method) 

我getView方法:

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

     View view=convertView; 
     ViewHolder holder; 

     if(convertView==null){ 
      view=inflater.inflate(R.layout.list_item, null); 
      holder=new ViewHolder(); 
      holder.imgItemImage=(ImageView)view.findViewById(R.id.imgItemImage); 
      holder.tvItemTitle=(TextView)view.findViewById(R.id.tvItemTitle); 
      holder.tvItemDetails=(TextView)view.findViewById(R.id.tvItemDetails); 
      view.setTag(holder); 
     }else 
      holder=(ViewHolder)view.getTag(); 

     holder.tvItemTitle.setText(data.get(position).getYear()+" "+data.get(position).getTitle()); 

     StringBuilder sb=new StringBuilder(); 
     sb.append(data.get(position).getPrice()); 
     sb.append("\n"); 
     sb.append(data.get(position).getCity()); 
     holder.tvItemDetails.setText(sb.toString()); 


     String imageUrl="http://myuri/"+data.get(position).getUrlList().get(0)+"/p-t.jpeg"; 
     holder.imgItemImage.setTag(imageUrl); 

     imageLoader.displayImage(imageUrl, activity, holder.imgItemImage); 

     return view;  
    } 

當第一次調用getView時,convertView=null,所以創建了ViewHolder對象。但在調用findViewById(...)之後,ViewHolder類的所有成員仍然爲空。所以,這裏是起源NullPointerException。查看膨脹是成功的,因爲我可以在調試期間看到,view對象包含RelativeLayout與它的孩子。 最糟糕的是我沒有改變這部分的應用程序,纔開始崩潰! 這讓我瘋狂!

+0

是類顯示拋出空指針?如果是這樣,哪一行是72? – 2011-05-10 19:51:11

+0

72 is holder =(ViewHolder)view.getTag();但是,當我調試應用程序72線沒有達到時,因爲第一次調用getView是因爲convertView爲空,所以在調試期間,我得到異常後holder.tvItemTitle.setText(data.get(position).getYear()+「」+ data.get (位置).getTitle()); – 2011-05-10 19:57:57

+0

你的數據變量可能是陳舊的嗎?以下內容可以返回null嗎? data.get(position) – 2011-05-10 20:05:02

回答

7

您是否嘗試過從頭開始重建應用程序? 項目 - >清潔

3

嘗試重建R類。在eclipse中,它就像在佈局XML中更改某些內容一樣簡單,並再次保存以獲取最新的R.id. *。有時他們會搞砸。

+0

沒有工作:( – 2011-05-10 20:04:02

3

所以,這就解決了。我試圖重新整理,清理項目。然後我從工作區中刪除它並重新打開 - 它工作。這是Eclipse的bug,這太可怕了,我浪費了幾個小時!感謝所有人的迴應!對不起,打擾...

相關問題