Tüm kişileri rehberden ve ekrandan almam gereken bir uygulama üzerinde çalışıyorum. Kullanıcının bazı kişileri seçmesini ve db'ye kaydedilmiş bir gruba eklemesini istiyorum.Eşzamanlı gmail hesaplarıyla kişileri alamıyor
i özel bir liste oluşturdukview- contactitem.xml-
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">
<TextView
android:id="@+id/contactname"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:layout_marginLeft="20dp"
android:ellipsize="end"
android:singleLine="true"
android:clickable="true"/>
<TextView
android:id="@+id/contactnum"
android:layout_width="wrap_content"
android:textColor="@color/White"
android:clickable="true"
android:layout_gravity="center_vertical"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/add"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:text="@string/add_contacts"
android:layout_gravity="center_vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:focusable="false"
android:focusableInTouchMode="false"/>
</LinearLayout>
i kişisinin kişileri alma için bir SelectContact sınıfı
public class SelectContacts extends Activity implements OnClickListener{
private String groupName;
private Button back;
private Button home;
private List<Contact> list = new ArrayList<Contact>();
private ListView contactList;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.selectcontacts);
Bundle bundle = getIntent().getExtras();
groupName=bundle.getString("groupName");
back=(Button)findViewById(R.id.back_button);
back.setOnClickListener(this);
home=(Button)findViewById(R.id.home_button);
home.setOnClickListener(this);
contactList=(ListView)findViewById(R.id.contactsListView);
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
cur.moveToFirst();
if (cur.getCount() > 0) {
do{
String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
String[] fields={ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER};
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, fields, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{id}, null);
pCur.moveToFirst();
do {
String number=pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Contact c=new Contact(name,number);
list.add(c);
}while (pCur.moveToNext());
pCur.close();
}
}while (cur.moveToNext());
ContactAdapter contactAdapter=new ContactAdapter(this, R.layout.contactitem, list, contactList,groupName);
contactList.setAdapter(contactAdapter);
}
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent= new Intent();
if(v==back){
Bundle bundle = new Bundle();
bundle.putString("groupName", groupName);
intent.putExtras(bundle);
intent.setClass(SelectContacts.this, GroupDetails.class);
startActivity(intent);
}
if(v==home){
intent.setClass(SelectContacts.this, Welcome.class);
startActivity(intent);
}
}
}
Book- ve özel bir uygulamaya sahip Adaptörü-ContactAdapter- `
public class ContactAdapter extends ArrayAdapter<HashMap<String, Contact>>{
private ArrayList<HashMap<String, Contact>> items;
private LayoutInflater mInflater ;
public ContactAdapter(Context context, int textViewResourceId, ArrayList<HashMap<String, Contact>> items) {
super(context, textViewResourceId, items);
this.items = items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
mInflater = LayoutInflater.from(getContext());
ViewHolder holder;
if(convertView==null){
convertView = mInflater.inflate(R.layout.contactitem, parent, false);
holder = new ViewHolder();
holder.name = (TextView) convertView.findViewById(R.id.contactname);
holder.number = (TextView) convertView.findViewById(R.id.contactnum);
holder.add=(Button)convertView.findViewById(R.id.add);
convertView.setTag(holder);
}
else{
holder=(ViewHolder)convertView.getTag();
}
String name=items.get(position).get(""+position).getContactName();
String number=items.get(position).get(""+position).getContactNum();
holder.name.setText(name);
holder.number.setText(number);
return convertView;
}
static class ViewHolder{
TextView name;
TextView number;
Button add;
}
}
here Contact is a simple POJO-
public class Contact {
private String contactName;
private String contactNum;
public String getContactName() {
return contactName;
}
public void setContactName(String contactName) {
this.contactName = contactName;
}
public String getContactNum() {
return contactNum;
}
public void setContactNum(String contactNum) {
this.contactNum = contactName;
}
}
i
Yukarıdaki kod Emulater sessiz cezası çalışır .. android içinde Newbie ve kişi adını ve listeyi görüntülemek numaralarını getir. ama syncronized, aşağıdaki hata ile çöktü var hesabı bir Gmail hesabınız var Bu kod telefonunuza ..
CursorIndexOutOfBoundsException test ederken: 0
boyutunda Endeksi 0 istenen, hiçbir fikrim neden yok Bu oluyor. Lütfen bazı önerilerinizi belirtin ...
Manifest'te doğru izne sahip olduğunuzu kabul etmek güvenli midir? http://developer.android.com/reference/android/Manifest.permission.html#READ_CONTACTS – Joset
umm Tüm gerekli izinleri doğru şekilde ayarlamış olduğumu düşünüyorum. aşağıdaki gibidir-- Başka izin almam gerekiyor mu? ? –
Bu hatayı nereden alıyorsunuz? Emin olamam ama sorunun ikinci sorgunuzda olduğu izlenimim var. Buna benzer bir şeye benziyor: http://stackoverflow.com/questions/3370628/retrieve-contact-phone-number-from-uri-in-android – kingston