u014174000 2015-08-03 14:12 采纳率: 0%
浏览 1494

android程序,报空指针,自己陷入思维僵局了。谁来看看,应该不难。

android程序,这个界面显示的是手机联系人,在我们平台注册过的联系人显示在最前面。这是adapter中的代码,我感觉逻辑没什么问题,但是在把mList中的几个数据显示完后,在显示非注册用户的时候报了空指针。
Contact是个bean,mList是注册过的手机联系人,list是所有的手机联系人。我要让注册过的显示在列表最上面。viewHolder.tv_name.setText(contact.getName()); 这句报了空指针。

public View getView(int position, View convertView, ViewGroup parent) {
        final Contact contact ;
        ViewHolder viewHolder ;
        if (convertView == null) {
            viewHolder = new ViewHolder() ;
            convertView = LayoutInflater.from(activity).inflate(
                    R.layout.item_addphone_contact, null);
            viewHolder.tv_name = (TextView) convertView.findViewById(R.id.tv_name);
            viewHolder. tv_state = (FriendStateBtn) convertView.findViewById(R.id.tv_add);
            viewHolder.tv_phone = (TextView) convertView.findViewById(R.id.tv_phone);
            viewHolder.user_image = (ImageView) convertView
                    .findViewById(R.id.user_image);
            viewHolder.sort_key_layout = (RelativeLayout) convertView
                    .findViewById(R.id.sort_key_layout);
            viewHolder.sort_key = (TextView) convertView.findViewById(R.id.sort_key_item);
            viewHolder.tv_state.setOnClickListener(null);
            convertView.setTag(viewHolder);
        }else{
            viewHolder = (ViewHolder) convertView.getTag();
        }

        if(position < mList.size()){ //显示注册过的联系人
            contact = getContact(mList.get(position).getMember_phone());
            if (contact!=null) {
                list.remove(contact);
                notifyDataSetChanged();
            }
        }else{
            contact = list.get(position-mList.size());
        }
//在mList中的数据取完后,在取list数据时报了空指针
        viewHolder.tv_name.setText(contact.getName());
        viewHolder.tv_phone.setText(contact.getNumber().replace(" ", ""));

        if(position<mList.size()){
            if (mList.get(position).getIsFriend().equals("1")) {
                viewHolder.tv_state.setText("已是好友");
                viewHolder.tv_state.setState(FriendStateBtn.State.added);
            } else {
                viewHolder.tv_state.setText("添加");
                viewHolder.tv_state.setState(FriendStateBtn.State.add);
                contact.setMember_id(mList.get(position).getMember_id());
            }
        }else {
            viewHolder.tv_state.setText("邀请");
            viewHolder.tv_state.setState(FriendStateBtn.State.invent);
        }

        viewHolder.tv_state.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (TextUtils.isEmpty(contact.getMember_id())) {
                    Tools.sendSMS(activity,
                            contact.getNumber().replace(" ", ""), "");
                } else {
                    initHttp(contact);
                }
            }
        });

        int section = indexer.getSectionForPosition(position);
        if(position == indexer.getPositionForSection(section)){
            viewHolder.sort_key.setText(contact.getSortKey());
            viewHolder.sort_key_layout.setVisibility(View.VISIBLE);
        }else{
            viewHolder.sort_key_layout.setVisibility(View.GONE);
        }
        return convertView;
    }

    private Contact getContact(String member){
        for(int i=0;i<list.size();i++){
            String number = list.get(i).getNumber().replace("+86","").replace("-","");
            if(member.equals(number)){
                return list.get(i);
            }
        }
        return null;
    }
  • 写回答

1条回答 默认 最新

  • vv_小虫 博客专家认证 2015-08-03 14:30
    关注

    viewHolder.tv_state.setOnClickListener(null);

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog