2012-06-19 3 views
0

Я пытаюсь получить доступ к Подробной информации о контактах, но я получаю только основные детали, я использую платформу Ecliar, что означает,Первичные данные только приближаются?

Теперь я получаю имени, номер и электронной ID всех контакты с помощью этого code.But Если контакт с 2 номером и 2 идентификаторов электронной почты я получаю только первичный номера, и Email ID

Я использую дисплей в ListView как

1.Name 1, Кол-во 1, адрес электронной почты 1.

2.Name 1, Number2, электронная почта Id 2. для первого лица и так далее

3.Name 2, номер 1, электронная почта Id 1 для второго человека и так on.will продолжать, как это.

Но я получаю только номер1 и адрес электронной почты 1 конкретного контакта. Не получил номер 2 и адрес электронной почты id2 этого контакта.

Я отредактировал логику цикла, но он перешел к некоторым другим ошибкам. Как решить эту проблему ?

Код

public class Details extends Activity { 

ListView lvItem; 
private Button btnAdd; 
String emailAddress = "" ; 
String displayName = "" ; 
String phoneNumber = "" ; 
ArrayList<String> contactlist=new ArrayList<String>(); 
ArrayAdapter<String> itemAdapter; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    lvItem = (ListView)this.findViewById(R.id.listview); 
    btnAdd = (Button)this.findViewById(R.id.btn); 
    itemAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,contactlist); 
    lvItem.setAdapter(itemAdapter); 
    btnAdd.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      readContacts(); 

     } 
    }); 
} 


private void readContacts() 
{ 
    ContentResolver cr =getContentResolver(); 
    Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
    while (cursor.moveToNext()) 
    { 
     displayName = "" ; 
      ArrayList<String> phoneNumber = new ArrayList<String>(); 
      ArrayList<String> emailAddress = new ArrayList<String>(); 

     displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));  
     String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 

     Cursor emails = cr.query(Email.CONTENT_URI,null,Email.CONTACT_ID + " = " + id, null, null); 
     while (emails.moveToNext()) 
     { 
      emailAddress.add(emails.getString(emails.getColumnIndex(Email.DATA))); 
      break; 
     } 
     emails.close(); 
     if(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) 
     { 
      Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{id}, null); 
      while (pCur.moveToNext()) 
      { 
       phoneNumber.add(pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))); 
       break; 
      } 
      pCur.close(); 
     } 

int phoneNumberCount = phoneNumber.size(); 
int emailCount = emailAddress.size(); 

// Add arraylist data to contactlist.. 

if(phoneNumberCount > emailCount) { 

    for (int i=0; i<=phoneNumberCount; i++) 
     { 
     if(emailCount>i) 
      { 
      contactlist.add(displayName + " , " + phoneNumber.get(i) + " , " + emailAddress.get(i)+"\n"); 
      } 
     else 
     { 
      contactlist.add(displayName + " , " + phoneNumber.get(i)+"\n"); 
     } 
     } 
    } 
    else 
     { 
     for (int i=0; i<=emailCount; i++) 
     { 
     if(phoneNumberCount>i) 
      { 
      contactlist.add(displayName+", "+phoneNumber.get(i)+", "+ emailAddress.get(i)+"\n"); 
      } 
     else 
     { 
      contactlist.add(displayName+","+ emailAddress.get(i)+"\n"); 
     } 
     } 
    }  
    } 
    Collections.sort(contactlist); 
    itemAdapter.notifyDataSetChanged(); 
    cursor.close(); 

} 
    } 

Любое решение?

LogCat

06-19 11:28:08.058: W/KeyCharacterMap(265): No keyboard for id 0 
06-19 11:28:08.068: W/KeyCharacterMap(265): Using default keymap:  /system/usr/keychars/qwerty.kcm.bin 
06-19 11:28:33.187: D/dalvikvm(265): GREF has increased to 201 
06-19 11:33:32.118: W/KeyCharacterMap(307): No keyboard for id 0 
06-19 11:33:32.118: W/KeyCharacterMap(307): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 
06-19 14:16:35.488: D/AndroidRuntime(385): Shutting down VM 
06-19 14:16:35.498: W/dalvikvm(385): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 
06-19 14:16:35.498: E/AndroidRuntime(385): Uncaught handler: thread main exiting due to uncaught exception 
06-19 14:16:35.507: E/AndroidRuntime(385): java.lang.IndexOutOfBoundsException: Invalid location 1, size is 1 
06-19 14:16:35.507: E/AndroidRuntime(385): at java.util.ArrayList.get(ArrayList.java:341) 
06-19 14:16:35.507: E/AndroidRuntime(385): at com.abhi.Trial3.readContacts(Trial3.java:100) 
06-19 14:16:35.507: E/AndroidRuntime(385): at com.abhi.Trial3.access$0(Trial3.java:44) 
06-19 14:16:35.507: E/AndroidRuntime(385): at com.abhi.Trial3$1.onClick(Trial3.java:38) 
06-19 14:16:35.507: E/AndroidRuntime(385): at android.view.View.performClick(View.java:2364) 
06-19 14:16:35.507: E/AndroidRuntime(385): at android.view.View.onTouchEvent(View.java:4179) 
06-19 14:16:35.507: E/AndroidRuntime(385): at android.widget.TextView.onTouchEvent(TextView.java:6541) 

ответ

0

Попробуйте этот код, замените readContacts() метод от ваших и дайте мне знать, что случилось ..

private void readContacts() 
{ 
    ContentResolver cr =getContentResolver(); 
    Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
    while (cursor.moveToNext()) 
    { 
     displayName = "" ; 
     ArrayList<String> phoneNumber = new ArrayList<String>(); 
     ArrayList<String> emailAddress = new ArrayList<String>(); 

     displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));  
     String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 

     Cursor emails = cr.query(Email.CONTENT_URI,null,Email.CONTACT_ID + " = " + id, null, null); 
     while (emails.moveToNext()) 
     { 
      emailAddress.add(emails.getString(emails.getColumnIndex(Email.DATA))); 
      break; 
     } 
     emails.close(); 
     if(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) 
     { 
      Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{id}, null); 
      while (pCur.moveToNext()) 
      { 
       phoneNumber.add(pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))); 
       break; 
      } 
      pCur.close(); 
     } 

int phoneNumberCount = phoneNumber.size(); 
int emailCount = emailAddress.size(); 

// Add arraylist data to contactlist.. 

if(phoneNumberCount > emailCount) { 

    for (int i=0; i<phoneNumberCount; i++) 
     { 
     if(emailCount>i) 
      { 
      contactlist.add(displayName + " , " + phoneNumber.get(i) + " , " + emailAddress.get(i)+"\n");  
      } 
     else 
     { 
      contactlist.add(displayName + " , " + phoneNumber.get(i)+"\n"); 
     } 
     } 
    } 
    else 
     { 
     for (int i=0; i<emailCount; i++) 
     { 
     if(phoneNumberCount>i) 
      { 
      contactlist.add(displayName+", "+phoneNumber.get(i)+", "+ emailAddress.get(i)+"\n"); 
      } 
     else 
     { 
      contactlist.add(displayName+","+ emailAddress.get(i)+"\n"); 
     } 
     } 
    }  
    } 
    Collections.sort(contactlist); 
    itemAdapter.notifyDataSetChanged(); 
    cursor.close(); 
} 
+0

В разделе Добавить Список_массивы данных в ContactList, он показывает ошибку на основном IF сессия emailAddress.get (I) в качестве нескольких маркеров в строке удалить этот маркер. – BigBoss

+0

ya код не имеет ошибки, но приложение неожиданно остановилось, я строю проект и очищаю проект снова и снова, но он все еще остается ... – BigBoss

+0

logcat is done ............ ....... – BigBoss

0

удалить перерыв в то время как все петли.

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List; 

import android.app.Activity; 
import android.content.ContentResolver; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.provider.ContactsContract; 
import android.provider.ContactsContract.CommonDataKinds.Email; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 

public class StackOverFlowGetContactsActivity extends Activity { 

    ListView lvItem; 
    private Button btnAdd; 
    String displayName="", emailAddress="", phoneNumber=""; 
    ArrayList<String> contactlist=new ArrayList<String>(); 
    ArrayAdapter<String> itemAdapter; 
    ArrayList<String> emailarray=new ArrayList<String>(); 
    ArrayList<String> phonearray=new ArrayList<String>(); 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     lvItem = (ListView)this.findViewById(R.id.listView_items); 
     btnAdd = (Button)this.findViewById(R.id.btnAddItem); 
     itemAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,contactlist); 
     lvItem.setAdapter(itemAdapter); 
     btnAdd.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       readContacts(); 
      } 
     }); 
    } 

    private void readContacts() 
    { 
     ContentResolver cr =getContentResolver(); 
     Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
     while (cursor.moveToNext()) 
     { 
      displayName="";emailAddress=""; phoneNumber="";phonearray.clear(); emailarray.clear(); 
      displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));  
      String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
      Cursor emails = cr.query(Email.CONTENT_URI,null,Email.CONTACT_ID + " = " + id, null, null); 
      while (emails.moveToNext()) 
      { 
       emailarray.add(emails.getString(emails.getColumnIndex(Email.DATA))); 
       // break; 
      } 
      emails.close(); 
      if(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) 
      { 
       Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{id}, null); 
       while (pCur.moveToNext()) 
       { 
        phonearray.add(pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))); 
        // break; 
       } 
       pCur.close(); 
      } 

      if(phonearray.size()>0) 
      { 
       for(int i=0; i<phonearray.size();i++) 
       { 
        if(emailarray.size()>0) 
        { 
         for(int j=0; j<emailarray.size();j++) 
         { 
          emailAddress=emailarray.get(j); 
          phoneNumber=phonearray.get(i); 
          contactlist.add(displayName+","+phoneNumber+","+ emailAddress); 
         } 
        } 
        else 
        { 
         phoneNumber=phonearray.get(i); 
         contactlist.add(displayName+","+phoneNumber+","+ emailAddress);     
        } 
       } 
      } 
      else 
      { 
       contactlist.add(displayName+","+phoneNumber+","+ emailAddress); 
      } 

     } 
     cursor.close(); 
     sortList(contactlist); 
     itemAdapter.notifyDataSetChanged(); 
    } 

    private static void sortList(List<String> aItems){ 
     Collections.sort(aItems, String.CASE_INSENSITIVE_ORDER); 
     } 
} 
+0

вы здесь !!! определенно я получу решение, проверит ваш код ... – BigBoss

+0

Вы пробовали с этим изменением? – Ponmalar

+0

Я пытаюсь akka – BigBoss