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;
}