使用ArrayAdapter和标记。空指针异常

时间:2014-04-03 02:49:24

标签: android

现在我正在开发Android应用程序。我认为这是一个严重的问题......该程序因Null Pointer异常而死亡。但是,我不明白"为什么程序会死亡"。这是我的源代码。

class CommentViewHolder{
    NetworkImageView userIcon;
    TextView userName;
    TextView timeAgo;
    TextView deleteBtn;
    TextView comment;
}
public class CommentsAdapter extends ArrayAdapter<Comment> implements OnClickListener{

    private Context mContext;
    Comment comment;
    CommentViewHolder holder;

    public CommentsAdapter(Context context, ArrayList<Comment> object){
        super(context,0,object);
        mContext = context;
        holder = null;
    }

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

        View v = convertView;

        if ( v == null ){
            LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.detail_comment_listview, null);

            holder = new CommentViewHolder();

            holder.userIcon = (NetworkImageView) v.findViewById(R.id.detailCommentUserIcon);
            holder.userName = (TextView) v.findViewById(R.id.detailCommentUserName);
            holder.timeAgo = (TextView) v.findViewById(R.id.detailCommentTimeAgo);
            holder.deleteBtn = (TextView) v.findViewById(R.id.detailCommentDeleteBtn);
            holder.comment = (TextView) v.findViewById(R.id.detailComment);

            v.setTag(holder);
        }else{
            holder = (CommentViewHolder)convertView.getTag();
        }

        comment = this.getItem(position);
        holder.userName.setTag(comment);   // here I set the tag!

        if( comment != null ){

            holder.userName.setText(comment.getUserName());
            holder.timeAgo.setText(comment.getTimeAgo());
                holder.deleteBtn.setVisibility(View.VISIBLE);
            holder.deleteBtn.setVisibility(View.GONE);

            holder.comment.setText(comment.getDescription());

            holder.deleteBtn.setOnClickListener(this);
            holder.userName.setOnClickListener(this);
        }
        return v;
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

        Comment clickItem = (Comment)v.getTag();
        int userId = clickItem.getUserId();  // Null Pointer exception this line...
        int commentId = clickItem.getId();

        switch(v.getId()){

        case R.id.detailCommentUserName:
            Toast.makeText(getContext(), userId + "id", Toast.LENGTH_SHORT).show();
            break;  

        case R.id.detailCommentDeleteBtn:
            Uri.Builder uri = null;
            Log.d("Bucket",commentId +"");
            break;
        }
    }
}

并且...当我单击R.id.detailCommentUserName按钮,然后程序动作窗口小部件Toast消息。但!当我单击detailCommentDeleteBtn时,程序因Null指针异常而死亡。

请给我建议......

1 个答案:

答案 0 :(得分:0)

你的OnClick将deleteBtn作为参数View v传递,并查看按钮的标签。但是你的适配器是在convertView上设置标签(在if的主分支中)和userName文本字段(在if下面)。您需要在deleteBtn上设置标记。