Android自定义适配器getView()NullPointerException无处不在!

时间:2011-05-10 19:44:41

标签: android

我有一个自定义适配器为ListView提供数据。一切都运行正常,但“突然”(我现在还没有另外一个词)我的应用程序在使用listview加载我的活动时开始崩溃:

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类的所有成员仍然为null。所以,这里有起源NullPointerException。查看膨胀是成功的,因为我在调试期间可以看到,view对象包含RelativeLayout及其子项。 最糟糕的是我在开始崩溃之前没有改变这部分应用程序! 这让我疯了!

3 个答案:

答案 0 :(得分:7)

您是否尝试过从头开始重建应用程序? 项目 - >清洁

答案 1 :(得分:3)

尝试重建R类。在eclipse中,它就像在布局XML中更改某些内容并再次保存以使R.id. *更新一样简单。有时他们搞砸了。

答案 2 :(得分:3)

所以,这已经解决了。我尝试重塑,清理项目。然后我从工作区删除它并重新打开 - 它工作。那是Eclipse的bug,那太可怕了,我浪费了几个小时!感谢大家的回复!抱歉打扰......