得到在HTC欲望的联系人列表android

问题描述:

我想获得列表视图上的联系人列表。我可以使用这个代码来显示。得到在HTC欲望的联系人列表android

private ContactList getContacts() { 
     ContactList contactList = new ContactList(); 
     Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; 
     String[] projection = new String[] { 
       ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, 
       ContactsContract.CommonDataKinds.Phone.NUMBER }; 

     Cursor people = getContentResolver().query(uri, projection, null, null, 
       null); 

     int indexName = people 
       .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME); 
     int indexNumber = people 
       .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 

     people.moveToFirst(); 
     do { 
      Contact c = new Contact(); 
      String name = people.getString(indexName); 
      String number = people.getString(indexNumber); 
      Log.d("number", "" + number); 
      c.setDisplayName(name); 
      c.set_phoneNumber(number); 
      contactList.addContact(c); 
     } while (people.moveToNext()); 
     people.close(); 
     return contactList; 
    } 

但是当我尝试在HTC渴望c将其不能工作的代码。任何人都可以告诉我为什么。 ? 什么是实际问题。以及如何解决它。

import java.lang.reflect.Array; 
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Comparator; 
import java.util.List; 

import android.R.bool; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.Contacts.Phones; 
import android.provider.ContactsContract; 
import android.text.Html; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.widget.AdapterView.OnItemClickListener; 

import com.google.ads.AdRequest; 
import com.google.ads.AdView; 

public class button extends Activity implements OnItemClickListener { 

private ListView listView; 
private List<ContactBean> list = new ArrayList<ContactBean>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    listView = (ListView) findViewById(R.id.list); 
    listView.setOnItemClickListener(this); 





    Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, 
      null, null); 

    while (phones.moveToNext()) { 

     String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 

     String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 



     ContactBean objContact = new ContactBean(); 
     objContact.setName(name); 
     objContact.setPhoneNo(phoneNumber); 
     list.add(objContact); 

    } 
    phones.close(); 

    ContanctAdapter objAdapter = new ContanctAdapter(button.this, 
      R.layout.alluser_row, list); 
    listView.setAdapter(objAdapter); 

    if (null != list && list.size() != 0) { 
     Collections.sort(list, new Comparator<ContactBean>() { 

      @Override 
      public int compare(ContactBean lhs, ContactBean rhs) { 
       return lhs.getName().compareTo(rhs.getName()); 
      } 
     }); 
     AlertDialog alert = new AlertDialog.Builder(button.this).create(); 
     alert.setTitle(""); 

     alert.setMessage(list.size() + " Contact Found!!!"); 

     alert.setButton("OK", new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.dismiss(); 
      } 
     }); 
     alert.show(); 

    } else { 
     showToast("No Contact Found!!!"); 
    } 
} 

protected boolean isNullValue(String input) 
{ 
    if(input==null) 
    { 
     return true;    
    } 
    else 
     return false; 
} 

private void showToast(String msg) { 
    Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); 
} 

@Override 
public void onItemClick(AdapterView<?> listview, View v, int position, 
     long id) { 
    ContactBean bean = (ContactBean) listview.getItemAtPosition(position); 
    showCallDialog(bean.getName(), bean.getPhoneNo()); 
} 

private void showCallDialog(String name, final String phoneNo) { 
    AlertDialog alert = new AlertDialog.Builder(button.this).create(); 
    alert.setTitle("Call?"); 

    alert.setMessage("Are you sure want to call " + name + " ?"); 

    alert.setButton("No", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.dismiss(); 
     } 
    }); 
    alert.setButton2("Yes", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      String phoneNumber = "tel:" + phoneNo; 
      Intent intent = new Intent(Intent.ACTION_CALL, Uri 
        .parse(phoneNumber)); 
      startActivity(intent); 
     } 
    }); 
    alert.show(); 
} 

public class ContanctAdapter extends ArrayAdapter<ContactBean> { 

    private Activity activity; 
    private List<ContactBean> items; 
    private int row; 
    private ContactBean objBean; 

    public ContanctAdapter(Activity act, int row, List<ContactBean> items) { 
     super(act, row, items); 

     this.activity = act; 
     this.row = row; 
     this.items = items; 

    } 

    @Override 
    public View getView(final int position, View convertView, 
      ViewGroup parent) { 
     View view = convertView; 
     ViewHolder holder; 
     if (view == null) { 
      LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(row, null); 

      holder = new ViewHolder(); 
      view.setTag(holder); 
     } else { 
      holder = (ViewHolder) view.getTag(); 
     } 

     if ((items == null) || ((position + 1) > items.size())) 
      return view; 

     objBean = items.get(position); 

     holder.tvname = (TextView) view.findViewById(R.id.tvname); 
     holder.tvPhoneNo = (TextView) view.findViewById(R.id.tvphone); 

     if (holder.tvname != null && null != objBean.getName() 
       && objBean.getName().trim().length() > 0) { 
      holder.tvname.setText(Html.fromHtml(objBean.getName())); 
     } 
     if (holder.tvPhoneNo != null && null != objBean.getPhoneNo() 
       && objBean.getPhoneNo().trim().length() > 0) { 
      holder.tvPhoneNo.setText(Html.fromHtml(objBean.getPhoneNo())); 
     } 
     return view; 
    } 
} 

public class ViewHolder { 
    public TextView tvname, tvPhoneNo; 
} 

public class ContactBean { 
    private String name; 
    private String phoneNo; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getPhoneNo() { 
     return phoneNo; 
    } 

    public void setPhoneNo(String phoneNo) { 
     this.phoneNo = phoneNo; 
    } 

} 
} 
+0

这两种解决方案有什么区别?我只能看到你没有提供投影。这真的是个诡计吗? 一些解释Vivek的解决方案出了什么问题,以及为什么您的解决方案修复了这个问题,我们将不胜感激! – 2017-12-08 13:58:48

+1

https://*.com/questions/7140746/sqlite-looks-like-movetonext-works-without-movetofirst-needed – Rohit 2017-12-11 10:39:49