Android自定义Listview中的NullPointerException

Android自定义Listview中的NullPointerException,android,android-listview,Android,Android Listview,在我的应用程序中,我使用Android自定义视图来显示一些日志信息。在该视图中,我希望根据一些标准更改项目的颜色。我尝试使用下面的代码,它会导致getView中出现NullPointerException @Override public View getView(int position, View convertView, ViewGroup parent) { try { View row = convertView; ItemHolder hold

在我的应用程序中,我使用Android自定义视图来显示一些日志信息。在该视图中,我希望根据一些标准更改项目的颜色。我尝试使用下面的代码,它会导致getView中出现NullPointerException

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

        if( row == null ){
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(layoutResouceId, parent, false);

            holder = new ItemHolder();
            holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon);
            holder.txtPhoneno = (TextView)row.findViewById(R.id.lvphoneno);
            holder.txtDateTime = (TextView)row.findViewById(R.id.lvdatetime);
            holder.txtSerialno = (TextView)row.findViewById(R.id.lvserialno);
            holder.txtStatus = (TextView)row.findViewById(R.id.lvstatus);

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

        MyListViewItem item = items.get(position);
        holder.imgIcon.setImageResource(item.icon);
        holder.txtPhoneno.setText(item.phoneno);
        holder.txtDateTime.setText(item.datetime);
        holder.txtSerialno.setText(item.serialno);

        if( !item.status.isEmpty()){
            if( -1 != item.status.indexOf("OK"))
                holder.txtStatus.setTextColor(Color.GREEN);
            else
                holder.txtStatus.setTextColor(Color.RED);
        }

        holder.txtStatus.setText(item.status);
        return row;         
    }
    catch (Exception e) {
        Helper.Log(getContext(), e.toString());
    }
    return null;
}
但有趣的是,当我删除下面的行时,效果很好

        if( !item.status.isEmpty()){
            if( -1 != item.status.indexOf("OK"))
                holder.txtStatus.setTextColor(Color.GREEN);
            else
                holder.txtStatus.setTextColor(Color.RED);
        }
logcat

    12-15 07:04:49.668: E/AndroidRuntime(331): FATAL EXCEPTION: main
    12-15 07:04:49.668: E/AndroidRuntime(331): java.lang.NullPointerException
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.widget.AbsListView.obtainView(AbsListView.java:1432)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.widget.ListView.makeAndAddView(ListView.java:1745)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.widget.ListView.fillDown(ListView.java:670)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.widget.ListView.fillSpecific(ListView.java:1302)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.widget.ListView.layoutChildren(ListView.java:1576)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.widget.AbsListView.onLayout(AbsListView.java:1260)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.view.View.layout(View.java:7175)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.view.View.layout(View.java:7175)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.view.View.layout(View.java:7175)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.view.View.layout(View.java:7175)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.view.View.layout(View.java:7175)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.view.ViewRoot.performTraversals(ViewRoot.java:1140)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.os.Handler.dispatchMessage(Handler.java:99)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.os.Looper.loop(Looper.java:123)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at android.app.ActivityThread.main(ActivityThread.java:3683)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at java.lang.reflect.Method.invokeNative(Native Method)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at java.lang.reflect.Method.invoke(Method.java:507)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    12-15 07:04:49.668: E/AndroidRuntime(331):  at dalvik.system.NativeStart.main(Native Method)
请帮我解决这个问题


谢谢

我打赌
状态
为空:

if( -1 != item.status.indexOf("OK"))
显然不为null,并且假设
holder.txtStatus.setText()
也不会抛出NPE,这只会留下
状态


(如果没有更多信息,我无法帮助您解决这个问题。)

当应用程序崩溃时,您应该始终发布日志,但我还是猜了一下。为什么在异常块之外的
getView()
中返回空值,-这太糟糕了!!!!至于NPE本身,您确定
layoutResuceId
row
的实际资源,它应该是非空的吗?如果是这样的话,那么NPE来自其他地方-请登录!我用空状态检查器和Logcat修改了我的问题,你在哪个API上测试这个?listview的输入数据来自数据库。我检查了status的值,它是null而不是空的。我更改为检查值是否为null。不管怎样,现在它正在工作thanks@kTekkie为什么您没有提到listview的数据来自数据库请在以后附上所有信息@t0mm13b抱歉,我是java/android新手,谢谢通知